analyze_clinical_activity
ChatGPTAggregate clinical activity across HCPs to find top ICD codes, HCPCS procedure codes, or NDCs by volume. Explodes the per-HCP activity lists and aggregates across all matching HCPs. activity_type: "icd" (diagnosis codes), "hcpcs" (procedures), or "ndc" (drugs) filter_segment: optional segment filter filter_state: optional state filter filter_has_brand_rx: True = only brand prescribers, False = non-brand only limit: top N codes to return Use for top ICD codes among brand prescribers, most common procedures among competitor prescribers, which NDC formulation do prescribers in a given state and specialty prefer, most common diagnosis codes, procedure volume breakdown, NDC preferences by segment. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
analyze_universe
ChatGPTDynamically slice and aggregate the HCP universe DataFrame. Filters (all optional, combine for AND logic): filter_state – 2-letter state code, e.g. "CA" filter_segment – brand_prescriber, competitor_prescriber, condition_treater, procedure_performer, same_specialty filter_taxonomy – taxonomy code, e.g. "207RH0003X" filter_has_brand_rx – True = only brand prescribers filter_has_competitor_rx – True = only competitor prescribers (both True = dual writers) filter_has_icd_claims – True = only HCPs with ICD claims filter_has_hcpcs_claims – True = only HCPs with HCPCS procedures filter_min_brand_trx – minimum brand TRx threshold filter_min_hcp_rank_score – minimum rank score threshold (0-100) filter_city – city name filter filter_zip_code – zip code filter group_by: "state", "city", "zip_code", "taxonomy_code", or "segment" metric: "count", "sum_brand_trx", "sum_competitor_trx", "avg_brand_trx", "avg_hcp_rank_score", "brand_share", "sum_brand_patients", "sum_competitor_patients", "sum_icd_claims", "sum_hcpcs_procedures", "patient_share" sort_order: "desc" (highest first) or "asc" limit: max rows to return (default 20) Use for ANY dynamic question: prescribers by state, brand share by state, specialties in a state, dual writers, city-level drill-down, segment comparison, competitor strength by geography, high-volume prescribers in a region, patient volumes by state, ICD claim volume by taxonomy, etc. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
code_search
ChatGPTSearch audience reference codes (specializations, geos, etc.) for one brand.
compare_doceree_vs_platform
ChatGPTCompare a Doceree metric against a cited benchmark for another ad platform.
competitive_trends
ChatGPTGet the BRAND's own prescription trends over time (monthly Rx data by NDC). This is brand Rx data from claims — NOT competitor-specific Rx trends. Competitor-specific Rx trends are not separately tracked. Use for brand Rx trend in competitive context, how are our prescriptions trending, month over month brand Rx, prescription growth rate, brand trajectory over time. Note: Rx data carries a 1-2 week lag from the claims pipeline. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
detect_anomalies
ChatGPTRun anomaly detection for the active brand. Returns alerts for prescriber churn, market share drops, engagement drops, and more. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
drill_down_overlap
ChatGPTDrill into brand∩competitor overlap grouped by specialty, state, city, ICD, or HCPCS.
fetch
ChatGPTFetch full details for one Doceree product by its name/id. `id is a product name as returned by search`. Returns a JSON object with the full product record, or a not-found payload.
fetch_campaign_catalog
ChatGPTFetch a campaign reference catalog (e.g. platforms, formats, geos). `advertiser_id/brand_id MUST come from list_accounts. catalog_type` selects which reference set to return. Read-only.
generate_briefing
ChatGPTSummarize the active brand's morning brief and point the user at the Daily Command desk. Renders from the canonical desk generator (the same sections the on-screen desk uses), returning a short summary plus a deep link rather than a long inline brief body. Use this for: "morning brief", "morning briefing", "daily brief", "what needs attention", "what happened today". Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_analytics_result
ChatGPTFetch the result of a `start_analytics_query/run_nlp_to_sql task by task_id. Returns {"status":"running"} while in progress, the full analytics payload once complete, or an error envelope if it failed or the id is unknown (including one belonging to another user). Prefer the generic get_mcp_task_result` for new integrations; this is kept for existing callers.
get_aqs_summary
ChatGPTGet Audience Quality Score (AQS) summary: average, min, max scores, total HCPs scored, score distribution (high/medium/low percentages). Use for AQS methodology, how AQS is calculated, what defines high/medium/low AQS, score thresholds, AQS distribution, average/min/max scores, how many HCPs have high AQS, what is a good AQS score, AQS for brand prescribers. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
get_audience_engagement
ChatGPTGet audience engagement breakdown by platform type (Endemic vs POC). Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_available_audiences
ChatGPTList saved targets of one type for an advertiser/brand. `advertiser_id/brand_id MUST come from list_accounts. target_type is one of audience (HCP, default), account (ABM), patient (DTC/DOOH), or pharmacist` (POD). Read-only. Unlike the chat tool, this is session-less: it reads the brand's saved targets directly, with no campaign-flow guardrail.
get_brand_attribute
ChatGPTOne curated brand attribute (dosage form, route, manufacturer, biomarkers, …).
get_brand_challenges
ChatGPTGet strategic marketing challenges for the brand. Uses real market data (market share, competitors, prescribers) and web research to identify specific, actionable challenges. Results are cached -- same challenges every time. Call this when the user asks about challenges, problems, issues, barriers, or difficulties the brand faces. Also use for what makes this drug unique, competitive differentiation, brand positioning challenges. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
get_brand_growth_mom
ChatGPTGet brand's month-over-month growth: scripts, previous month, growth %. Use when user asks: is the brand growing, declining, month over month, MoM trend, rising, falling, trajectory, growth rate, monthly growth. Returns monthly script counts with MoM growth percentage. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_brand_ndcs
ChatGPTGet all NDC codes for the brand drug: code, formulation, package size. Use for NDC codes, formulations, package sizes, NDC-11/NDC-10 formats, how many NDCs, what strengths are available, dosage forms. For volume/prescriber breakdown per NDC, use get_ndc_analysis instead. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_brand_overview
ChatGPTBrand identity snapshot: name, generic name, therapeutic area, drug class, indication, lifecycle stage — for one advertiser/brand from `list_accounts`. Returns status='complete' immediately on a warm brand context; on a cold one, returns status='running' — poll with get_mcp_task_result.
get_brand_prescription_writers_overview
ChatGPTWho writes the brand's prescriptions — bounded snapshot for the chat agent. Returns how prescribers split across segments in the loaded universe (counts only) plus how many NPI rows exist in the prescriber registry metadata. Does not enumerate every prescriber record (that payload can be millions of characters). Use when the user asks who prescribes the brand, who writes for the brand, brand prescriber mix, or prescriber composition. For ranked HCPs use get_top_prescribers or catalog tools; for one NPI use search_hcp_by_npi; for overlap totals use get_prescriber_stats. For audience export use audience_builder. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_brand_rank_in_class
ChatGPTGet the brand's rank within its therapeutic area by script volume. Use when user asks: rank, position, ranking, where does brand stand, therapeutic area rank, drug class rank, what number, leader or follower. Returns ranked list with script counts. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_brand_script_count
ChatGPTGet the brand's total prescription script count by month. Use when user asks: how many prescriptions, scripts this month, brand prescription count, monthly script volume, total scripts, Rx volume. Returns monthly script counts for the active brand. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_brand_vs_tier1
ChatGPTBrand vs Tier-1: `volume, monthly_trend, or overlap_counts`.
get_business_rule
ChatGPTFetch one saved AI business rule by id (read-only). `advertiser_id/brand_id MUST come from list_accounts`.
get_campaign_breakdown
ChatGPTSupplementary per-subcampaign breakdown card with spend, impressions, clicks, CTR, CPM, and HCPs reached. Do NOT call this as the primary tool for performance analysis — use run_nlp_to_sql instead for live delivery + Rx stitched narratives with per-campaign GROUP BY. Only call this for a quick subcampaign lookup table after run_nlp_to_sql has already provided the main analysis. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_campaign_journey_timeline
ChatGPTCampaign lifecycle view: delivery + Rx + pacing by subcampaign for one brand. Use when the user asks for a campaign "journey", flight-to-date story, how many doctors saw ads, prescription totals by tactic, or post-mortem for completed flights. Delegates to the same NLP-to-SQL pipeline as `run_nlp_to_sql with a fixed multi-part analytical brief. advertiser_id/brand_id MUST come from list_accounts. campaign_focus` optionally narrows to one campaign name. May return status='running' — poll with get_mcp_task_result.
get_campaign_performance_brief
ChatGPTSupplementary UI performance card with KPI tiles, pillar summaries, and an 8-week trend chart. Do NOT call this as the primary tool for performance questions — use run_nlp_to_sql instead for live delivery + Rx stitched narratives. Only call this AFTER run_nlp_to_sql when the user specifically wants the UI performance card format. `advertiser_id/brand_id MUST come from list_accounts`. May return status='running' — poll with get_mcp_task_result.
get_combo_drugs
ChatGPTCombination-drug data for the active brand (`actual or predicted_vs_actual`).
get_competitor_by_drug_class
ChatGPTGet competitor scripts grouped by drug class. Use when user asks: competitor by class, drug class breakdown, class-level competitors, classes competing, group by class. Returns competitor scripts per drug class. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_competitor_info
ChatGPTGet competitor information: tiered breakdown (direct, therapeutic alternatives, treatment pathway) with names, drug classes, prescriber counts, AND per-competitor Rx share and TRx from market share data. Use for competitor names, generic names, manufacturers, drug classes, mechanisms, tiers (tier 1/2/3), therapeutic alternatives, treatment pathway drugs, drugs in the same class on the market, how many competitors, who are the direct competitors, competitor NDC codes. Also use when asked about a specific competitor by name. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_competitor_stealing_prescribers
ChatGPTIdentify Tier 1 competitors actually stealing prescribers from the brand. Use when user asks: stealing prescribers, switchers, lost prescribers, prescribers we lost, switched away, churn analysis, defection. Switching is detected period-over-period using the IQVIA / Symphony "loss of share" methodology with 1-month windows: - W1 (months -3..-2): baseline brand-writing month - GAP (months -2..-1): buffer for behaviour to stabilise - W2 (months -1..now): recent month An NPI counts as switched when ALL four conditions hold: - brand_trx in W1 >= 2 (was a regular brand writer, not one-shot) - brand_trx in W2 < 50% of W1 (brand declined materially) - competitor_trx in W2 > W1 on the same NPI (competitor grew) - the growing competitor is a Tier 1 direct competitor Returns one row per Tier 1 competitor with: - `competitor - drug name - npis_who_switched - count of NPIs meeting all conditions - avg_competitor_trx_growth - mean added TRx for the competitor - avg_brand_trx_decline` - mean lost TRx on the brand Adoption (writing both with no decline) does NOT count as switching. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_competitor_tier_summary
ChatGPTCompetitor tiers: `list (by tier) or market_share` (by tier).
get_data_quality
ChatGPTGet data quality assessment: quality score, tier (gold/silver/bronze), field availability, evidence summary. Use for data reliability, data freshness, how current the data is, data methodology, data sources, field completeness, data quality score, is the data reliable, how was the data collected, data confidence level. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_drug_context
ChatGPTClinical and financial context for any drug name via live web search.
get_drug_difference
ChatGPTCount of writers of `drug_a who do not write drug_b` (set difference).
get_dual_writer_profile
ChatGPTGet comprehensive profile of dual writers -- HCPs who prescribe BOTH brand AND competitor drugs. Includes volume comparison vs brand-only prescribers, loyalty ratio, per-competitor loyalty breakdown (how many lean towards each competitor), top states, top specialties. Use for how many prescribers write both brand and competitors, dual writer analysis, are dual writers higher volume, loyalty ratio of shared prescribers, which states have the most dual writers, dual writer characteristics, brand loyalty among shared prescribers, which competitor do they lean towards. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_entity_hierarchy
ChatGPTGet the active brand's campaign/subcampaign hierarchy with exact Snowflake IDs and human-readable names. Returns ONLY the currently active brand — not other brands under the advertiser. Call this when you need BRAND_ID, CAMPAIGN_ID, or SUBCAMPAIGN_ID for SQL queries or campaign analysis. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_executive_summary
ChatGPTCached KPI headline for one advertiser/brand: total campaigns, spend, impressions, HCPs reached, effective CPM. Quick cached check only — for live delivery + Rx data use `run_nlp_to_sql` instead, same as the chat agent's guidance. Returns status='complete' immediately on a warm brand context; on a cold one, returns status='running' — poll with get_mcp_task_result.
get_fastest_growing_competitor
ChatGPTIdentify the fastest-growing competitor by linear regression slope. Use when user asks: fastest growing competitor, accelerating competitor, gaining share, which competitor is rising, momentum competitor. Returns competitors ranked by growth slope. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_geographic_deep_dive
ChatGPTState-level HCP deep dive (segments, volumes, cities, specialties) for one US state.
get_geographic_distribution
ChatGPTGet geographic distribution (top states) of brand-related doctors/HCPs: state, HCP count, percentage. Quick state-level counts. Use for which state has the most prescribers/doctors/physicians, state-level summary, geographic breakdown, top states, regional distribution, where are the prescribers located. For DETAILED state drill-down with TRx/segments/cities, use get_geographic_deep_dive instead. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_hcpcs_codes
ChatGPTGet all HCPCS/CPT procedure codes associated with the brand: code, frequency, patient count, prescriber count. Also includes validated codes with categories and relevance levels. Use for HCPCS/CPT code lookups, what a specific HCPCS code means/represents, code descriptions, ranking by frequency/patients/prescribers, validated codes, code categories (drug administration, monitoring, diagnostic, treatment, supportive care), how many HCPCS codes, which codes are most common, show only validated codes, reimbursement-related procedure codes. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_icd_codes
ChatGPTGet all ICD diagnosis codes associated with the brand: code, frequency, patient count, prescriber count. Also includes validated ICD codes with categories and relevance levels. Use for ICD code lookups, what a specific ICD code means/represents, code descriptions, ranking by frequency/patients/prescribers, validated vs unvalidated codes, relevance levels (high/medium/low), how many ICD codes, which codes are most common, ICD codes for the brand's indication, show only validated codes, show only high-relevance codes. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_market_share
ChatGPTBrand vs. competitor market share for one advertiser/brand. `view: brand_vs_competitors (default), by_tier, or vs_tier1_direct`. Returns status='complete' immediately on a warm brand context; on a cold one, returns status='running' — poll with get_mcp_task_result.
get_market_share_breakdown
ChatGPTGet market share breakdown for brand vs all competitors over last 12 months. Use when user asks: market share, share percentage, share vs competitors, brand share, percentage breakdown, who has what share, share split. Returns scripts and share % per drug. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_mcp_task_result
ChatGPTPoll any long-running MCP tool call by its `task_id`. Every tool that can return status='running' (run_nlp_to_sql, get_campaign_journey_timeline, get_campaign_performance_brief, get_brand_challenges, query_audience, web_search, and any brand-scoped tool on a cold context) is polled the same way here. Call this again with the same task_id until status is 'complete' or 'failed' — never report the connector as unavailable solely because the operation is still running.
get_mechanism_compare
ChatGPTCompare mechanism of action (MOA) of the brand vs competitors. Use when user asks: mechanism of action, MOA, how does it work, pharmacology comparison, action mechanism vs competitors, MOA difference. Returns brand and competitor MOA comparison. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_multi_drug_intersection
ChatGPTCount of prescribers writing ALL listed drugs (intersection).
get_narrative_framework
ChatGPTMessaging/narrative framework for a marketing challenge. Empty `challenge` returns the catalog of available challenge keys.
get_ndc_analysis
ChatGPTAggregate NDC-level prescribing data across all prescribers in a segment. segment can be 'brand' or any competitor drug name from the brand's panel. Returns per-NDC totals: TRx, patients, prescriber count, % of volume. Use for which NDC is most prescribed, formulation/strength breakdown, NDC volume split, which strength is preferred, product mix analysis. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_overlap_by_geography
ChatGPTGet per-competitor prescriber overlap broken down by state/geography. Cross-references competitor NPI lists from prescriber_npis with the HCP universe DataFrame to show WHERE overlap prescribers are located. Returns per-competitor overlap counts by state, with loyalty direction per state. Use for: overlap by state, geographic breakdown of shared prescribers, which states have the most competitor overlap, overlap with a named competitor by state. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_pacing_data
ChatGPTGet campaign pacing data (spend summary). Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_patient_volume_analysis
ChatGPTPatient-level aggregation across the HCP universe. Unlike TRx-focused tools, this provides patient counts, patients per prescriber, and patient share. group_by: "segment", "state", "taxonomy_code", "city" filter_segment: optional segment filter Use for how many patients are on the brand, patient share by state, average patients per prescriber, which specialty treats the most patients, patient volume analysis, patient vs TRx comparison. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_platform_benchmarks
ChatGPTCited advertising benchmarks (CPC, CPM, CTR, etc.) for a non-Doceree platform.
get_prescriber_concentration
ChatGPTAnalyze prescriber concentration / Pareto distribution for a segment. Computes what % of Rx the top 10%, 20%, 50% of prescribers account for. segment can be 'brand' or a competitor name. Use this for questions like 'Do top 20% of prescribers account for 80% of Rx?' Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_prescriber_details
ChatGPTGet prescriber details breakdown: total doctors/physicians/HCPs by analysis tier. Returns summary counts only, not individual prescriber records. Use for prescriber tier breakdown, analysis tiers, how prescribers are categorized, tier methodology, prescriber ranking system, segment priority. NOT for aggregate counts (use get_prescriber_stats) or NPI lookup (use search_hcp_by_npi). Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_prescriber_overlap
ChatGPTBrand-vs-competitor prescriber / patient overlap analyses. Args: view: One of: - dual_writers - NPIs writing both brand and any competitor - lapsed - high-volume competitor writers not writing brand - tier1_overlap - brand ↔ tier-1 prescriber overlap - patient_overlap - per-competitor patient overlap Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
get_prescriber_stats
ChatGPTGet AGGREGATE prescriber statistics for brand and competitors: prescriber count, total TRx (total prescriptions), total patients per group, plus overlap context showing how many brand prescribers also write for competitors. Use for how many doctors/physicians/HCPs/prescribers total, total Rx count, total patients, prescriber counts per competitor, brand vs competitor prescriber comparison, total TRx, total unique doctors. NOT for top-N ranking (use get_top_prescribers) or concentration/Pareto analysis (use get_prescriber_concentration). Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_prescription_data
ChatGPTGet prescription trend data (monthly TRx by NDC). Note: Rx data carries a 1-2 week lag from the claims pipeline. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_prescription_trends
ChatGPTGet monthly prescription trends for the brand with per-NDC breakdown. Returns list of monthly data points. Use for how prescriptions changed over time, monthly trends, growth or decline, seasonal patterns, TRx over time, prescription volume history, time period covered, trend analysis, year-over-year comparison. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_quarterly_yoy_volume
ChatGPTGet quarterly script volume with year-over-year comparison. Use when user asks: quarterly comparison, year over year, YoY, Q1 Q2 Q3 Q4, quarterly breakdown, this quarter vs last year, annual quarter comparison. Returns quarterly volume with YoY deltas. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_segment_deep_dive
ChatGPTDeep-dive stats for one prescriber segment (brand writers, competitors, etc.).
get_targeting_codes
ChatGPTGet therapeutic targeting codes (ICD-10, CPT, HCPCS) mapped to the brand's indication and therapeutic area. Includes categorized codes with relevance. Use for targeting setup, campaign activation codes, which ICD/CPT codes to target, POC trigger codes, therapeutic targeting. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_taxonomy_distribution
ChatGPTGet specialty/taxonomy distribution of brand-related HCPs: taxonomy code, description, HCP count, percentage. Also includes validated taxonomy codes used to build the same_specialty segment. Use for what taxonomy code X means, which specialty has the most HCPs, percentage of HCPs by specialty (e.g. cardiologists, endocrinologists, oncologists, neurologists, pulmonologists, internists, family medicine), specialty breakdown, taxonomy code lookups, what specialty is code 207RH0003X, top specialties, how many of a given specialty prescribe, specialty distribution, validated taxonomy codes, which specialties are relevant to this brand. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_top_codes_by_prescribers
ChatGPTTop ICD/HCPCS/NDC codes for a prescriber cohort (brand, competitor, tier).
get_top_hcps_by_score
ChatGPTGet top HCPs ranked by composite hcp_rank_score (0-100). The rank score combines brand TRx, competitor TRx, ICD claims, HCPCS procedures, and geographic/taxonomy relevance into a single targeting priority score. Optionally filter by segment (brand_prescriber, competitor_prescriber, condition_treater, procedure_performer, same_specialty). Use for highest-potential targets, best HCPs to target, prioritized prescriber list, targeting recommendations, who should we focus on, highest opportunity HCPs. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
get_top_prescribers
ChatGPTPrescriber intelligence for the active brand. Args: view: One of: - top_10 - Q7 (top-10 prescribers by volume) - new_quarter - Q12 (new prescribers in current quarter) - switchers - Q41 (tier-1 competitors stealing prescribers) - expected - Q8 (expected specialties for this brand) - concentration- Q11 (top-20% volume concentration) Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name.
get_treatment_profile_summary
ChatGPTGet the brand's treatment profile: dosing, route, prior auth, specialty. Use when user asks: treatment profile, dosing, route of administration, oral or injection, prior auth requirements, specialty pharmacy, line of therapy, how is it given. Returns dose form, route, PA flag, specialty pharmacy flag. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
get_trend_data
ChatGPTBrand trend slice: `seasonal, weekly_12w, or vs_competitor_12m`.
get_universe_summary
ChatGPTHCP universe summary: total HCPs by segment, total brand/competitor TRx and patients. Served from the brand-intel cache; returns an empty `universe_summary with a note when nothing is cached yet for this brand — retry with run_nlp_to_sql` for a live count in that case. Returns status='complete' immediately on a warm brand context; on a cold one, returns status='running' — poll with get_mcp_task_result.
list_accounts
ChatGPTList the advertisers and brands the signed-in user can access. Call this FIRST to discover the `advertiser_id and brand_id values you may pass to account-scoped tools. Returns only accounts the authenticated user is authorized for. Requires OAuth (MCP_OAUTH_ENABLED). advertiserId/brandId are opaque handles for chaining into other tools only — never display raw IDs to the user; always refer to advertisers and brands by their advertiserName/brandName`.
list_all_taxonomies
ChatGPTFull NUCC taxonomy leaf list for the brand's zone (audience building).
list_audiences
ChatGPTList saved audiences for one advertiser/brand the user can access. `advertiser_id and brand_id MUST come from list_accounts — a pair the user is not authorized for is rejected. Read-only. IDs are for tool plumbing only — never display raw IDs to the user; refer to the advertiser/brand by the advertiserName/brandName included in the response, and audiences by their name`.
list_business_rules
ChatGPTList the saved AI business rules for one advertiser/brand. `advertiser_id/brand_id MUST come from list_accounts`. Read-only. Refer to rules by their name, not raw ids.
list_connected_sources
ChatGPTList data partners and apps connected to one advertiser/brand workspace.
list_differentiation_angles
ChatGPTList Doceree's differentiation angles (route of administration, data, etc.).
lookup_medical_codes
ChatGPTBrand-scoped ICD/HCPCS/NDC lookup for targeting and business rules.
match_products_to_challenge
ChatGPTMap a marketing challenge to the Doceree products that address it. Returns a challenge->product matrix with a short rationale per product. `stage optionally narrows to a funnel stage (e.g. awareness`).
query_audience
ChatGPTProject an audience size/breakdown for a targeting `spec (read-only). advertiser_id/brand_id MUST come from list_accounts. spec` is the targeting definition (specializations, geography, code filters); resolve valid codes via the catalog/taxonomy data first. Does NOT save anything — it only projects the demographic reach. A broad spec can run long; may return status='running' — poll with get_mcp_task_result.
run_nlp_to_sql
ChatGPTLive analytics for one advertiser/brand: NLP question -> Snowflake SQL -> narrative. `advertiser_id/brand_id MUST come from list_accounts. Same pipeline as the chat agent's run_nlp_to_sql` — narrative, sample rows, chart artifact, pacing facts when available. Brand/subcampaign ids are already resolved to names inside the pipeline output — never surface any remaining raw ObjectId to the user, refer to entities by name. This can take 30s-2min. Returns status='complete' with the full result in 'result' when it finishes quickly; otherwise status='running' with a 'task_id' — poll it with get_mcp_task_result (or get_analytics_result) until status is 'complete' or 'failed'. Calling this again with the same question while it is still running returns the SAME task, so retrying is always safe.
search
ChatGPTSearch Doceree's product and solution catalog. Returns a JSON object with a `products list (compact summaries) and a count. Pass a marketing challenge or funnel need as query` to filter; an empty or non-matching query returns the full catalog.
search_artifacts
ChatGPTSemantic search over the signed-in user's past artifacts (media plans, reports, etc.).
search_competitive_landscape
ChatGPTWeb search for competitive landscape intelligence about a drug class.
sov_analysis
ChatGPTGet Share of Voice (SOV) analysis for the active brand vs. competitors. Includes market share data derived from real Rx claims. Use for share of voice, competitive voice share, how much voice does the brand have, brand voice vs competitors, SOV percentage, voice share comparison. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
start_analytics_query
ChatGPTStart a long-running analytics query and return a task_id immediately. Compatibility tool: `run_nlp_to_sql now auto-degrades to this same behavior on its own, so prefer that unless you specifically want to start the query WITHOUT waiting at all. Poll get_analytics_result (or the generic get_mcp_task_result) with the returned task_id until status is complete. advertiser_id/ brand_id MUST come from list_accounts`.
suggest_marketplace_partners
ChatGPTFind marketplace partners that could fill a data capability gap (read-only).
threat_detection
ChatGPTDetect competitive threats by analyzing competitor landscape, prescriber overlap, and market signals. Returns threats with counter-campaign suggestions. Use for competitive threats, which competitors are a threat, threat analysis, competitive risk, counter-campaign suggestions, competitor risk assessment, threat severity scoring. Requires advertiser_id/brand_id from list_accounts. IDs are for tool plumbing only — never display raw IDs to the user; refer to the brand/advertiser by name. Returns status='complete' with 'result' immediately on a warm brand context; on a cold one, returns status='running' with a 'task_id' -- poll it with get_mcp_task_result until status is 'complete' or 'failed'.
translate_taxonomy_code
ChatGPTTranslate a 10-character NUCC taxonomy code to a human-readable specialty.
web_search
ChatGPTGeneral web search (open internet). Returns ranked result snippets. `search_type optionally biases the search (e.g. news`). Use for fresh, external facts not in Doceree's first-party data. May return status='running' — poll with get_mcp_task_result.
analyze_clinical_activity
Claudeanalyze_universe
Claudecompetitive_trends
Claudedetect_anomalies
Claudefetch
Claudefetch_campaign_catalog
Claudeget_analytics_result
Claudeget_aqs_summary
Claudeget_audience_engagement
Claudeget_available_audiences
Claudeget_brand_challenges
Claudeget_brand_ndcs
Claudeget_brand_overview
Claudeget_brand_prescription_writers_overview
Claudeget_campaign_breakdown
Claudeget_campaign_journey_timeline
Claudeget_campaign_performance_brief
Claudeget_competitor_info
Claudeget_data_quality
Claudeget_dual_writer_profile
Claudeget_entity_hierarchy
Claudeget_executive_summary
Claudeget_geographic_distribution
Claudeget_hcpcs_codes
Claudeget_icd_codes
Claudeget_market_share
Claudeget_narrative_framework
Claudeget_ndc_analysis
Claudeget_overlap_by_geography
Claudeget_pacing_data
Claudeget_patient_volume_analysis
Claudeget_prescriber_concentration
Claudeget_prescriber_details
Claudeget_prescriber_overlap
Claudeget_prescriber_stats
Claudeget_prescription_data
Claudeget_prescription_trends
Claudeget_targeting_codes
Claudeget_taxonomy_distribution
Claudeget_top_hcps_by_score
Claudeget_top_prescribers
Claudeget_universe_summary
Claudelist_accounts
Claudelist_audiences
Claudelist_business_rules
Claudelist_differentiation_angles
Claudematch_products_to_challenge
Claudequery_audience
Clauderun_nlp_to_sql
Claudesearch
Claudesov_analysis
Claudestart_analytics_query
Claudethreat_detection
Claudeweb_search
Claude