get_account_client_bases_list
ChatGPTMANDATORY lookup tool for get_accounts_data(client_bases=...): returns exact account client-base values. You MUST call this before using client_bases.
get_account_client_sub_types_list
ChatGPTMANDATORY lookup tool for get_accounts_data(client_sub_types=...): returns exact valid account client sub-type values. Call this before using client_sub_types.
get_account_customer_crm_systems_list
ChatGPTMANDATORY lookup tool for get_accounts_data(customer_crm_system=...): returns exact valid customer CRM system values. Call this before using customer_crm_system.
get_account_investment_styles_new_list
ChatGPTMANDATORY lookup tool for get_accounts_data(investment_style_new=...): returns exact valid investment style values. Call this before using investment_style_new.
get_account_product_structures_list
ChatGPTMANDATORY lookup tool for get_accounts_data(product_structures=...): returns exact product structure values. Call this before using product_structures and map user wording to exact entries.
get_account_services_list
ChatGPTMANDATORY lookup tool for get_accounts_data(services=...): returns exact valid services values. Call this before using services.
get_account_sub_types_list
ChatGPTMANDATORY lookup tool for get_accounts_data(sub_types=...): returns exact valid Dakota account sub-type values. Use this before applying sub_types because values must match this list exactly.
get_account_types
ChatGPTMANDATORY lookup tool: returns the complete list of exact valid account type strings accepted by get_accounts_data(types=...) and get_contacts_data(account_types=...). You MUST call this tool BEFORE using the types filter — even if the user's input looks valid. User inputs like 'Pension Fund', 'Insurance', or 'LP' are NOT exact values and will cause empty results if passed directly. Always map user input to the closest value(s) from this list.
get_accounts_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Accounts (firm-level allocator organizations). Use this tool when the user is asking about institutions/firms such as pension funds, endowments, foundations, family offices, RIAs, insurance companies, banks, consultants, and other allocator entities. This is the primary firm-discovery tool and calls the Dakota Marketplace/Salesforce-backed Accounts API. In Dakota Marketplace, an Account is an organization record (not a person/contact). Use this tool for questions like: "find allocators by type", "firms in a metro area/city", "accounts by AUM range", "ticket size / check size bands", "real assets or feeder-funds-tagged allocators", "who does venture / VC", or "firms with specific strategy exposure (asset classes, sector, industry)." Returned rows use business-facing normalized field names where practical. For example, expect fields like organization_name, organization_type, organization_category, metro_area, office_location, venture_capital_focus, private_equity_focus, private_credit_focus, real_assets_focus, hedge_fund_focus, esg_focus, and ticket_size_summary instead of raw Salesforce/Dakota naming. MANDATORY — `get_accounts_data` must run for any ask that expects named firms, a ranked or unranked list, "top N", "most relevant", "who should I target", or scoped universes (by geography, type, AUM, strategy, etc.). Calling `get_account_types`, `get_assets_list`, or any other lookup tool alone is never sufficient to answer those questions — you must complete normalization, then call `get_accounts_data` and base the account list on its `data` (pagination as documented below). Dakota Marketplace has broad allocator coverage, so empty results often indicate over-restrictive or mismatched filters rather than missing market data. ═══════════════════════════════════════════════════════════════════ SECTION 3 USE-CASE CONTEXT (DAK-822): ═══════════════════════════════════════════════════════════════════ This Accounts tool should prioritize firm discovery and screening logic for these Dakota Marketplace use cases: - 3.1 Capital Raising (Fundraisers) - 3.2 PE / VC Deal Teams (Company Origination) - 3.3 Investment Banking - 3.5 Software and Technology Sales into Private Markets - 3.6 Investment Allocators (Sourcing Managers and Deals) - 3.7 Law Firms - 3.8 Corporate Development Teams Use-case rules (MANDATORY behavior): - 3.1 Capital Raising: - Prioritize allocator-firm discovery by types, geography (metro_areas/state/country), AUM, and strategy intent. - When the user asks for call lists/target firms, always return firm-level results first from accounts. - 3.2 PE / VC Deal Teams: - Use this tool to build sponsor/firm universes by sector, industry, geography, and strategy sleeves before any people pivot. - Keep strategy mapping lookup-first (asset_classes via get_assets_list) and avoid over-constraining in first pass. - 3.3 Investment Banking: - Treat account search as the primary screen for potential advisory clients (sponsors/investment firms/allocator firms). - Favor firm-level attributes (AUM, strategy, geography, transaction-relevant sector/industry) before narrower filters. - 3.5 Software/Technology Sales: - Use this tool for ICP/account-list generation by firm type, size, and geography. - Return organization-level targets; do not switch to contacts unless user explicitly asks for people/titles. - 3.6 Investment Allocators: - Use account filters to build allocator universes for manager-sourcing asks. - Prefer broad recall-first screening (types + geography + AUM + high-signal strategy flags), then refine. - 3.7 Law Firms: - Use this tool to surface firm targets tied to fund formation/M&A activity context. - Keep outputs as institution lists with relevant firm attributes; avoid person-level assumptions. - 3.8 Corporate Development: - Use firm-level screening to identify acquisition/sponsor ecosystems by sector/geography and company profile constraints. - Keep first pass broad; progressively narrow after confirming non-empty results. Cross-section enforcement: - Treat this tool as primary entrypoint for institution/firm universe construction. - Prefer account-level filters first (types, organization_category, geography, AUM, strategy/profile), then tighten progressively. - If user asks for people at returned firms, keep account scoping here first, then pivot to contacts. - Preserve Section 4/5 boundaries: no fabricated facts, no out-of-scope market claims, no external-source substitution. MANDATORY INTENT FIELD: - Every get_accounts_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. VALUE SHAPE CONTRACT (MANDATORY): - Single-value yes/no array fields must stay array-shaped with exactly one value: ['Yes'] or ['No']. - Use single-value array shape for: invest_in_impact_sri_or_esg, hedge_fund, real_assets, venture_capital_focus, is_feeder_funds, models, hedge_fof, private_equity_fof, lp_power_user, cryptocurrency, x1031_exchange, private_infrastructure, offers_co_invest, allows_third_party_solicitors, structured_products, private_equity, private_credit, co_investments, ocio_businesses, and emerging_manager_programs. - Boolean fields must stay booleans (true/false): form_5500_account, ria_aggregator. - Numeric fields must stay numeric: number_of_employees_from, number_of_employees_to, page_number. - Date fields must stay YYYY-MM-DD strings: created_date_from, created_date_to. - `investment_interest`: list of string search tokens/phrases (API investmentInterest). Not yes/no shaped; use MCP schema description for value hints. Use get_investment_focus_list only for investment_focus. - Do not mix scalar and array shapes for the same field anywhere in this prompt. `asset_classes` vs `private_equity` / `private_credit` / `venture_capital_focus` (coverage tradeoff): - `asset_classes` = taxonomy from get_assets_list: high precision when the field is populated, but many real allocators (especially pensions) have sparse or empty asset-class tags — combining strict asset_classes with pension types + geography can return zero rows even when the market has many relevant firms. - `private_equity=["Yes"]` / `private_credit=["Yes"]` = coarse account-level orientation / activity-style flags: higher recall for “does PE / does private credit” screening, but noisier (wider net). Use for allocator discovery when recall matters; use `asset_classes` to refine after you have a non-empty universe, or when the user names specific sleeves (buyouts, VC, etc.). - `venture_capital_focus=["Yes"]` = coarse venture-orientation / venture-signal flag: often broader and more available than exact venture-capital taxonomy fields, but not proof of exact asset_classes=['Venture Capital'] tagging and not proof of venture deal activity. Use when the user asks broadly who does venture / VC and exact taxonomy may be too sparse. ═══════════════════════════════════════════════════════════════════ ACCOUNTS ↔ CONTACTS ORCHESTRATION (MANDATORY DECISION LOGIC): ═══════════════════════════════════════════════════════════════════ Dakota data is relational: contacts belong to accounts. For many user asks, best results require a two-step flow across both tools. Use this tool first, then pivot to get_contacts_data, when user intent is: - "Who at these firms...?" - "CIOs/decision makers at pension funds/family offices/endowments in <geo>?" - "Find people at firms matching AUM/type/asset-class constraints." - "Provide me account along with its contact details." Recommended two-step execution: 1. Run get_accounts_data first to identify/validate the target account universe using firm-level filters. 2. Reuse the same normalized filters in get_contacts_data (especially account_types, geography, AUM band). Do not copy organization_category from accounts to contacts — contact organization categories differ; use exact contact organization_category labels from the Contacts tool field description when filtering by contact record type. 3. Add contact-only filters in second step (e.g., contact_types, person/title intent if available). 4. Present people results; keep account context in explanation. Do NOT stop after account-only output when the user explicitly asks for people/roles. You MUST continue to contacts. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ If your query uses ANY of the following filters, you MUST normalize to exact valid values (and call lookup tools wherever a lookup tool is listed). NEVER pass user-provided values directly — even if they look correct. Filter → Lookup tool ───────────────────────────────────────────────────── types → get_account_types sector → get_sectors_list industry → get_industries_list asset_classes → get_assets_list investment_focus → get_investment_focus_list sub_types → get_account_sub_types_list product_structures → get_account_product_structures_list client_bases → get_account_client_bases_list client_sub_types → get_account_client_sub_types_list customer_crm_system → get_account_customer_crm_systems_list services → get_account_services_list investment_style_new → get_account_investment_styles_new_list billing_cities → get_city_names_for_accounts_and_contacts Steps: 1. For each filter in the table, call its lookup tool first. 2. Map the user's input to the closest matching valid value(s). 3. Use ONLY those exact values in the query. This is MANDATORY even when the user's input appears valid. "Pension Fund" is not a literal type — map to exact values from get_account_types. Skipping lookup is the #1 cause of false empty results. COMMON TYPE MAPPINGS (first-pass only — always validate via get_account_types before calling): - "Pension Fund" / "Pensions" (allocator / investment-office intent; default) → ["Public Pension Fund", "Local Government Pension", "Corporate Pension Fund (Inv Office)", "Taft-Hartley Plan (ERISA)", "Superannuation Fund"] — do NOT include "Corporate Pension Fund (Plan)" here unless the user clearly means plan-level / DB/DC / corporate retirement plans, not allocator offices. - Plan-level pension intent (e.g., "pension plan", "DB plan", "DC plan", "corporate retirement plan") → add to the list above: ["Corporate Pension Fund (Plan)", "Corporate Pension Plan", "Corporate Retirement Plans"] - "Endowment" → ["Endowment", "Hospital Endowment"] - "Foundation" → ["Foundation"] - "Insurance" → ["Insurance Company", "Insurance Company General Account", "Insurance General Account"] - "Family Office" → ["Family Office"] - "RIA" → ["RIA"] - "Allocators" (broad allocator discovery) → ["Public Pension Fund", "Local Government Pension", "Corporate Pension Fund (Inv Office)", "Taft-Hartley Plan (ERISA)", "Superannuation Fund", "Endowment", "Hospital Endowment", "Foundation", "Family Office", "Sovereign Wealth Fund", "Insurance Company", "Insurance Company General Account", "Insurance General Account", "RIA"] — do not stuff in vendor/team/event account types unless the user asks for them. - "Bank" → ["Bank", "Investment Bank"] - "Consultant" → ["Consultant"] - "Wealth Manager" → ["Wealth Manager"] - "Sovereign Wealth" → ["Sovereign Wealth Fund"] PENSIONS + PE / BUYOUTS / MID-MARKET BUYOUT (combined intent — use with MANDATORY `get_accounts_data` above): - `types`: use allocator-default pension types only — Public Pension Fund, Local Government Pension, Corporate Pension Fund (Inv Office), Taft-Hartley Plan (ERISA), Superannuation Fund as appropriate. Do not add `Corporate Pension Fund (Plan)` unless the user clearly means plan-level / DB / DC / corporate retirement plans (see plan-inclusive line above). - Strategy: when the user says PE, private equity, buyout, buyouts, LBO, mid-market buyout, venture, VC (or similar sleeves) together with pensions / European pensions / regional pension lists — call `get_assets_list`, map to exact `asset_classes` (e.g. Private Equity, Middle Market Buyout, Large Buyout, Leveraged Buyouts (LBO), Venture Capital — pick what matches their words). On the first query, prefer `asset_classes` for this sleeve intent — do not substitute `private_equity=["Yes"]` alone when buyout or mid-market language is present. - If that first query returns zero rows, use the ZERO-RESULT protocol (including Step 2b: drop asset_classes, try `venture_capital_focus=["Yes"]` for venture / VC intent or `private_equity=["Yes"]` for broader PE intent with the same pension/geo/types) before adding `Corporate Pension Fund (Plan)` or abandoning the search. ═══════════════════════════════════════════════════════════════════ STRATEGY LANGUAGE → asset_classes PLAYBOOK (when user mentions strategy / mandate): ═══════════════════════════════════════════════════════════════════ Colloquial strategy words ("PE", "buyouts", "venture", "private credit", "real estate", etc.) map to `asset_classes` using exact strings from `get_assets_list`, except where PENSIONS + PE / BUYOUTS or the first-pass hints row for pensions + geography + PE already set a stricter order. For other broad “who invests in PE / private credit” allocator asks (non-buyout wording, recall-first), `private_equity=["Yes"]` / `private_credit=["Yes"]` may be the first lever — then see Step 2b inverse and FIELD SELECTION. Do NOT pass user slang as asset_classes. Do not use investment_focus as the primary strategy capture — it is inconsistently populated; see IMPORTANT section below. When the user (or you infer) strategy / mandate / sleeve intent: 1. Call get_assets_list when you will use `asset_classes` (required before passing asset_classes). 2. Map the user's phrase to the closest 1–5 exact values (start broader, e.g. Private Equity alone, then add buyout sub-styles on retry). 3. Pass those exact strings in get_accounts_data(asset_classes=[...]) only when asset_classes is the chosen lever for that query. 4. On the first strategy-led query, omit investment_focus unless there is no reasonable asset_classes mapping; if you add investment_focus and get zero rows, remove it and retry (per recovery protocol). First-pass hints (always confirm asset_classes rows against get_assets_list — names must match exactly): User / colloquial intent → First-pass filter choice (then refine) ─────────────────────────────────────────── ───────────────────────────────────────────────────── "Private equity" / "PE" / "alternatives" with pensions + geography (e.g. “pensions in Europe doing PE”) → `get_assets_list` → `asset_classes` including at least `Private Equity` (add related rows if the user names sleeves). First call: pension `types` (allocator-default, no Corporate Pension Fund (Plan) unless plan intent) + `asset_classes` + geo. If zero rows, retry per Step 2b with `private_equity=["Yes"]` and omit asset_classes. If the user names buyouts / mid-market buyout / LBO / VC, see PENSIONS + PE / BUYOUTS block above — `asset_classes` first, not private_equity alone. "Buyouts" / "buyout" / "LBO" → Large Buyout, Middle Market Buyout, Lower Middle Market Buyout, Small Buyout, Leveraged Buyouts (LBO) — or start with Private Equity if results are too sparse "Venture" / "VC" / "startups" → Venture Capital; consider Growth Equity if user blurs growth vs early-stage. If exact venture taxonomy returns zero rows, retry with venture_capital_focus=["Yes"] before giving up. "Growth equity" → Growth Equity "Private credit" / "direct lending" → Private Credit, Global Private Credit; add Distressed Debt / Distressed only if user means distressed "Real estate" / "RE" / "property" → Real Estate, Private Real Estate; narrow to e.g. Core Real Estate, Value-Add Real Estate, Opportunistic Real Estate only after user specifies style "Infrastructure" / "infra" → Infrastructure, Private Infrastructure, Global Infrastructure, International Infrastructure, US Infrastructure as appropriate "Secondaries" / "sponsor-led secondaries" → Secondaries, Secondary Private Equity (and Secondary Real Estate if RE secondaries) "Fixed income" / "rates" (breadth) → Fixed Income, Core Fixed Income, Global Fixed Income — use Private Credit / related rows when user means private credit, not public IG only "Hedge funds" / "liquid alts" → Hedge Funds/Liquid Alternatives, Hedged (confirm via lookup) If no clear mapping exists after scanning get_assets_list, run without asset_classes first using types/geo/AUM, inspect returned rows' asset-class fields, then refine a second query. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD: Use the most reliable filters first → types, aum_from/aum_to, ticket_size_from/ticket_size_to (when the user specifies commitment or ticket bands), metro_areas, billing_states, or billing_countries. 2. ADD SECONDARY FILTERS after a sensible first slice → For pensions + PE / buyouts / mid-market buyout (combined), follow PENSIONS + PE / BUYOUTS — `asset_classes` from `get_assets_list` first, `private_equity` / `private_credit` only on retry after zero results (Step 2b). For other PE / private credit “doing X” allocator screens on pensions, LGPS, endowments, foundations without buyout/sleeve language, you may prefer `private_equity` / `private_credit` before `asset_classes` for recall. For broad venture / VC screening where exact asset_classes=['Venture Capital'] may be too sparse, use `venture_capital_focus=["Yes"]` as the recall-first fallback. For named sleeves (buyouts, VC, etc.) in general, use `asset_classes` from the playbook first. Then investment_focus (with care), sector, industry. 3. PREFER broader queries with progressive narrowing over highly specific first queries. FIELD SELECTION GUIDANCE: - Use types as the primary qualifier for allocator category (pension, endowment, foundation, family office, etc.). - Use organization_category to filter by Salesforce account organization category (API field recordType; e.g., Investment Allocator, General Business, Investment Firm). This is separate from types (Dakota account type). Use exact values from the tool parameter description for this filter and pass exact strings only. - Use invest_in_impact_sri_or_esg only when the user asks about Impact/SRI/ESG investing — single-value yes/no array: exactly ['Yes'] or ['No']. - Use hedge_fund only when the user asks about hedge fund involvement — single-value yes/no array: exactly ['Yes'] or ['No']. - Use ticket_size_from / ticket_size_to when the user specifies minimum and/or maximum ticket / check / commitment size (digits-only strings, same unit style as aum_from/aum_to). Map spoken amounts ($10M-$500M, etc.) to numeric strings. - Use real_assets when the user asks about real assets / real-estate–style allocator tagging on the account — single-value yes/no array: exactly ['Yes'] or ['No']. - Use venture_capital_focus when the user asks broadly who does venture / VC and exact venture taxonomy may be too sparse. This is a broad signal, not proof of exact asset_classes=['Venture Capital'] tagging or confirmed venture deal activity; shape must be exactly ['Yes'] or ['No']. - Use is_feeder_funds when the user asks about feeder funds allocator involvement — single-value yes/no array: exactly ['Yes'] or ['No'] (tool maps this to the feeder-funds API field fof in Dakota Marketplace). - Use asset_classes for granular strategy / sleeve intent when taxonomy is the goal (e.g., named buyout styles, VC, Real Estate sleeves) — always via get_assets_list exact strings. - Use consultant-family filters directly when the user specifies them: general_consultants, private_credit_consultants, dc_consultants, private_equity_consultants, real_estate_consultants, hedge_fund_consultants, real_assets_consultants. - Use allocator-profile filters directly when the user specifies them: client_types, sub_types, preferred_investment_vehicles, operational_statuses, product_structures, client_bases, ocio_businesses, emerging_manager_programs, lp_usages, etf_usages, cit_usages, form_5500_account, ria_aggregator, co_investments. - For lookup-backed allocator-profile filters, you MUST normalize with the dedicated lookup tool first: client_types, sub_types, preferred_investment_vehicles, operational_statuses, product_structures, client_bases, lp_usages, etf_usages, cit_usages. - ocio_businesses and emerging_manager_programs are yes/no-style array fields and accept only a single value at a time: exactly ['Yes'] or ['No']. Do not send both values together and do not send a scalar string. - co_investments is a single-value yes/no array field and should be exactly ['Yes'] or ['No']. form_5500_account and ria_aggregator are booleans. - Use `private_equity=["Yes"]` or `private_credit=["Yes"]` for “invests in PE / active in PE”-style firm discovery when `types` skew pension / public allocator and/or `billing_countries` is wide — except when PENSIONS + PE / BUYOUTS applies (then `asset_classes` first). Do not assume asset_classes alone will find every allocator; use Step 2b after zero results. - Prefer one primary strategy lever on the first query: either asset_classes or private_equity / private_credit, not both, unless a second pass still returns too many rows (then layer the other). PENSIONS + buyout/mid-market wording → `asset_classes` first (see dedicated block). - Use investment_focus for free-text/thematic intent (e.g., Growth, Buyout, Income, ESG) and combine carefully. - If asset_classes + investment_focus are both present and results are sparse, remove investment_focus first; if still sparse with pension-heavy types, try `private_equity=["Yes"]` and drop `asset_classes` (see recovery protocol). - Use metro_areas for regional discovery; use billing_cities for strict city-level targeting (validate via lookup). - Use billing_countries as a list of countries; if the user asks for a region (e.g., Europe, Middle East, EMEA), expand it yourself into a broad list of standard country names per the tool parameter description—do not call a lookup tool. - Use billing_states when user asks for state/province scope without precise city requirements. - Do NOT use billing_countries region expansion to build metro_areas; metro is a Dakota city-cluster field and should be set directly from metro intent. - Use aum_from / aum_to when user specifies size bands (e.g., $500M to $5B). - Add sector / industry only when user explicitly asks for those dimensions, because they can narrow heavily. - `asset_classes` vs `private_equity` / `private_credit` (single-value yes/no arrays): - Specific sleeves or styles (buyouts, VC, growth equity, secondaries, etc.) → `asset_classes` via get_assets_list. - Pensions + geography + PE / buyouts / mid-market buyout → `asset_classes` first (see PENSIONS + PE / BUYOUTS); then `private_equity=["Yes"]` on zero-result retry (Step 2b), not as a substitute for sleeve mapping on the first pass. - Broad “does PE / does private credit” allocator universe (pensions + geography without buyout/sleeve words) → `private_equity=["Yes"]` or `private_credit=["Yes"]` can be the better first lever when recall matters; `asset_classes` alone can yield false empty results. - Refinement: Once you have rows, you may add `asset_classes` to narrow, or start with asset_classes and fall back to `private_equity` on zero results (recovery protocol). IMPORTANT — investment_focus and `asset_classes` coverage: - investment_focus is NOT consistently populated at the account level in Dakota Marketplace. - Queries that combine investment_focus with other filters frequently return zero results even when matching accounts exist. If your query includes investment_focus and returns zero results, your FIRST retry MUST remove investment_focus. - `asset_classes` is precise when set, but coverage varies by account type — many pension and allocator records lack populated PE asset-class tags. Do not treat “no rows with asset_classes: Private Equity” as proof there are no PE-active pensions; retry with `private_equity=["Yes"]` (omit asset_classes) per recovery protocol. GEOGRAPHY HANDLING: metro_areas and billing_cities are DIFFERENT fields — understand the distinction: - metro_areas = Dakota's custom sales intelligence field. Groups firms by regional proximity (e.g., a firm in Stamford, CT is in the "New York" metro area). Fewer values, broader coverage. Use for regional/travel-based queries. - billing_cities = the literal city from the firm's office address (e.g., "New York City", "Stamford", "Boston"). More specific, more fragile. MUST be validated via get_city_names_for_accounts_and_contacts. - billing_states = state/province (e.g., "NY", "CA"). Use for state-level queries. - billing_countries = country (e.g., "US", "UK"). Use for country-level queries. Europe / Middle East / EMEA (billing_countries, self-expanded): - "Europe" / EU-style asks → build an inclusive list of European country names (common English names as used in billing data) and pass as billing_countries. - "Middle East" / MENA-style asks → build an inclusive list of Middle East / North Africa country names and pass as billing_countries. - "EMEA" or explicit Europe + Middle East → union the country sets for both Europe and the Middle East into one billing_countries array. - If the user already names specific countries, pass them through; do not over-expand. Routing rules: - For broad regions (e.g., "Northeast", "Bay Area", "Midwest"): use metro_areas or billing_states, NOT billing_cities. - For specific cities: use billing_cities after validating via lookup tool. - "NYC" / "New York" → use billing_cities including "New York City" (the exact lookup value) OR metro_areas containing "New York" (for the broader tri-state area). - "Bay Area" / "SF" → use metro_areas including "San Francisco". - "Northeast" → use billing_states with multiple values (NY, CT, MA, NJ, PA) or metro_areas for major metros. - NEVER guess city names — always validate via get_city_names_for_accounts_and_contacts. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell the user "no results found." DO NOT ask the user for clarification yet. You MUST execute this recovery sequence FIRST: STEP 1 — FILTER VALIDATION: - Check whether any filters may be invalid, approximate, or incorrectly mapped. - Especially re-check: types, organization_category, billing_cities, asset_classes, sector, industry, investment_focus, ticket_size_from, ticket_size_to, real_assets, venture_capital_focus, is_feeder_funds, consultant filters, and allocator-profile filters. - For client_types, sub_types, preferred_investment_vehicles, operational_statuses, product_structures, client_bases, lp_usages, etf_usages, and cit_usages, confirm you used the dedicated lookup tool and exact values. - If ANY filter might be wrong: call the relevant lookup tool(s), remap values, and retry the query immediately. STEP 2 — REMOVE UNRELIABLE FILTERS: - If investment_focus was used → remove it and retry. - If sector or industry was used alongside types → remove sector/industry and retry. - Drop the least essential filter and retry. STEP 2b — PE / PRIVATE CREDIT REALIGNMENT (before stripping geography): If you still have zero results after Step 2, `asset_classes` was used, and the user's intent includes private equity, PE, private credit, venture, VC, alternatives, or broad “who invests in …” allocator discovery: - Retry immediately with the same types, organization_category (if used), billing_countries / billing_states / metro_areas, aum_from/aum_to, and names as before. - Remove `asset_classes`. - Set `venture_capital_focus=["Yes"]` when intent is venture / VC. - Otherwise set `private_equity=["Yes"]` when intent is PE/alternatives (or `private_credit=["Yes"]` for private-credit intent). Use only one of these broad flags unless the user asked for multiple. - If this returns data, you may optionally run a follow-up narrower query with asset_classes for presentation — do not hide the successful recall-first result. STEP 3 — PROGRESSIVE FILTER RELAXATION: If filters appear valid but still too restrictive (including after Step 2b), relax in this priority order: 1. Remove geographic filters (billing_cities, billing_states) first. 2. Widen range filters (aum_from, aum_to, ticket_size_from, ticket_size_to, employee range) second. 3. Remove categorical filters (sector, industry, asset_classes, organization_category) and optional flags (real_assets, venture_capital_focus, is_feeder_funds, hedge_fund, invest_in_impact_sri_or_esg) third when they may be over-narrowing (if asset_classes is still present and Step 2b did not apply, removing it here is valid). 4. Keep types and names last — these are most likely the user's core intent. Retry after each relaxation. STEP 4 — ACCOUNT-TO-CONTACT PIVOT: If the user's query is about activity, behavior, or people (e.g., "who is investing in X", "allocators actively looking at Y", "decision makers at pension funds"): → These are better answered by get_contacts_data. → Try the query using contacts with relevant filters. SUPPORTED INPUT FIELDS (exact tool args): - names (list), types, organization_category (list), invest_in_impact_sri_or_esg (single-value array: ['Yes'] or ['No']), hedge_fund (single-value array: ['Yes'] or ['No']) - ticket_size_from, ticket_size_to (digits-only strings), real_assets (single-value array: ['Yes'] or ['No']), venture_capital_focus (single-value array: ['Yes'] or ['No']), is_feeder_funds (single-value array: ['Yes'] or ['No']; sent as payload key fof for feeder funds) - aum_from, aum_to, metro_areas, investment_focus, investment_interest (list of search tokens; schema description has value hints) - crd, year_founded, mutual_fund_usage, models (single-value array: ['Yes'] or ['No']), separate_account_usage, ric_usage, uma_usage, ucits_usage, hedge_fof (single-value array: ['Yes'] or ['No']), private_equity_fof (single-value array: ['Yes'] or ['No']) - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - billing_cities (list), billing_countries (list), billing_states (list) - asset_classes, sector (list), industry (list) - general_consultants, private_credit_consultants, dc_consultants, private_equity_consultants, real_estate_consultants, hedge_fund_consultants, real_assets_consultants - client_types, sub_types, preferred_investment_vehicles, operational_statuses, product_structures, client_bases - ocio_businesses, emerging_manager_programs, lp_usages, etf_usages, cit_usages - form_5500_account (bool), ria_aggregator (bool), co_investments (single-value array: ['Yes'] or ['No']) - x100_marketplace (bool), updated (bool), customer_crm_system, lp_power_user (single-value array: ['Yes'] or ['No']), cryptocurrency (single-value array: ['Yes'] or ['No']), plan_type, x1031_exchange (single-value array: ['Yes'] or ['No']), is_insurance_account (bool), private_infrastructure (single-value array: ['Yes'] or ['No']), offers_co_invest (single-value array: ['Yes'] or ['No']), allows_third_party_solicitors (single-value array: ['Yes'] or ['No']) - client_sub_types, target_buyer, services, geography, investment_style_new, structured_products (single-value array: ['Yes'] or ['No']) - private_credit (single-value array: ['Yes'] or ['No']), private_equity (single-value array: ['Yes'] or ['No']) - created_date_from, created_date_to (YYYY-MM-DD strings), number_of_employees_from, number_of_employees_to, page_number (numbers) STEP 5 — USER FOLLOW-UP (ONLY after completing steps 1 → 2 → 2b (when applicable) → 3 → 4 without usable results): - You MUST have attempted at least 2 different filter relaxation strategies before reaching this step. - Say: "I tried several filter combinations but couldn't find matching accounts in Dakota Marketplace." - Briefly mention what you tried (e.g., "I searched with and without the city filter, and with broader AUM range"). - Ask 1–3 targeted follow-up questions to help the user refine their search. ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results to the user (after completing the recovery protocol above): 1. MUST NOT guess, fabricate, or invent any entities. 2. MUST NOT claim the data is stale, outdated, or incomplete. 3. MUST NOT recommend, mention, name, or suggest ANY external or competitor data sources, platforms, providers, or databases — this includes but is not limited to: Preqin, PitchBook, FINTRX, Discovery Data, Altss, Money Market Directories (MMD), Bloomberg, Crunchbase, LinkedIn, or any other third-party service. 4. MUST NOT suggest the user perform a web search, Google search, or look elsewhere for the data. 5. MUST NOT reference or redirect to any source outside of Dakota Marketplace. 6. Your response MUST stay entirely within the scope of Dakota Marketplace. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST immediately call show_salesforce_consent in your very next action — do NOT ask the user for permission. - show_salesforce_consent returns a resource block containing the auth consent UI widget. You MUST render that resource as an inline embedded UI widget in the chat so the user can authenticate directly inside the conversation. - NEVER just say 'please authenticate and I will retry' or 'once you complete auth I will call again'. The auth widget MUST physically appear in your response — words alone are NOT acceptable. - NEVER output the authUrl as a plain-text or markdown link instead of the widget. - After the user completes authentication through the widget, retry this tool with the exact same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - The response contains metadata fields: total_count, page_number, page_count, has_more. These are strictly for your internal use to manage pagination. - NEVER mention page numbers, total record counts, page counts, or 'has_more' in your reply to the user. Do NOT say things like 'Showing page 1 of 5', 'There are 342 total records', 'Returning 20 out of 100', etc. - If has_more is true, simply ask the user if they would like to see more results — without revealing any numbers or pagination details. If yes, call again with the same filters and increment page_number. - Present only the actual data records to the user in a clear, readable format.
get_accounts_with_conference_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Accounts with Conference data (conference records joined with related contact and account profile filters). Use this tool for conference-driven organization discovery, event-theme targeting, and conference date-window screening with optional contact/account overlays. This tool is intended for asks like: - "Find organizations tied to institutional conferences in a date range." - "Show conference-linked firms by category/format/target audience." - "Find conference opportunities with contact/account profile constraints." MANDATORY — `get_accounts_with_conference_data` must run for asks expecting named organizations, target lists, top/best/most relevant results, or scoped conference-driven universes. Lookup tools alone are never sufficient. Dakota Marketplace has broad conference + firm coverage, so empty results often mean over-restrictive filters, incorrect picklist mapping, or value-shape mismatches. MANDATORY INTENT FIELD: - Every get_accounts_with_conference_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. VALUE SHAPE CONTRACT (MANDATORY — baseline app/docs/salesforce_endpoint_contracts.md Accounts with Conference section): - Do not reuse Contacts tool shapes for the same parameter names. On this endpoint, account_private_credit, account_private_equity, and account_hedge_fund are list-shaped in the contract (typically exactly ['Yes'] or ['No']), not scalar Yes/No. - Single-value yes/no arrays (exactly one element when used): account_ocio_businesses, account_emerging_manager_programs, account_co_investments, account_models, account_impact_esg_investing, account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_lp_power_users, account_cryptocurrency, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors. - Booleans (true/false): continuing_education_credits_available, emerging_manager, form_5500_contact, key_contact, california_privacy_notice_sent, account_form_5500, account_ria_aggregator, account_updated, account_is_insurance. - Date strings (YYYY-MM-DD): all *_date_* and *_deadline_* conference window fields. - Digits-only string bounds: aum_from, aum_to, account_number_of_employees_from, account_number_of_employees_to. - `daily_newsletters`: list-shaped string filters (contract example includes product-style values like Daily Brief); do not assume only Yes/No unless you have an exact allowed value list from lookup/tool output. - List filters (taxonomy, profile, consultants, account_structured_products, account_investment_focus_single, account_investment_interest, conference name/city/state/country/location/website): stay list-shaped; never send scalars where the contract shows arrays. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Conference and account fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── contact_types → get_contact_types_list asset_class_coverages → get_asset_class_coverages_list designations → get_contact_designations_list account_types → get_account_types account_asset_classes → get_assets_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list account_customer_crm_systems → get_account_customer_crm_systems_list account_client_sub_types → get_account_client_sub_types_list account_services → get_account_services_list account_investment_styles → get_account_investment_styles_new_list account_industry → get_industries_list account_sector → get_sectors_list billing_cities → get_city_names_for_accounts_and_contacts account_investment_focus_single → get_investment_focus_list Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user wording to exact valid values. 3. Pass only exact mapped values in the query. This is mandatory even if user input looks valid. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD: - Begin with 1-2 core conference taxonomy filters (category, format, target_audience, speaker_type) and/or conference date windows. 2. ADD SECONDARY FILTERS: - Add contact/account overlays only after you validate non-empty conference scope. 3. PROGRESSIVE NARROWING: - Avoid stacking many conference + contact + account filters in first pass. 4. RETAIN CORE USER INTENT: - Keep core conference intent dimensions as long as possible while relaxing secondary constraints. Field guidance: - Conference-primary filters: category, format, investment_focus, speaker_type, target_audience. - Free-form conference location/web fields: city, state, country, location, website (use when user explicitly provides them). - Contact/account overlays should be added when user asks for role/profile targeting. - Keep date filters in YYYY-MM-DD. - Keep numeric range filters as string digits where contract expects string bounds. - For related-account billing geography: validate billing_cities via get_city_names_for_accounts_and_contacts; for region-style billing_countries asks, expand regions to countries yourself (same rules as Accounts/Contacts prompts and the billing_countries field description). VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: - continuing_education_credits_available, emerging_manager, form_5500_contact, key_contact, california_privacy_notice_sent, account_form_5500, account_ria_aggregator, account_updated, account_is_insurance - Keep account strategy flags as yes/no list payloads (typically exactly ['Yes'] or ['No'] each): - account_private_credit, account_private_equity, account_hedge_fund - Keep single-value yes/no array fields array-shaped: - account_ocio_businesses, account_emerging_manager_programs, account_co_investments, account_models, account_impact_esg_investing, account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_lp_power_users, account_cryptocurrency, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors - Keep daily_newsletters and account_structured_products as non-boolean lists of exact string values (see contract examples); do not coerce unknown user phrases into Yes/No unless the value is explicitly allowed. - Keep numeric bounds as strings: - aum_from, aum_to, account_number_of_employees_from, account_number_of_employees_to - Keep page_number numeric. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell user "no results found." DO NOT ask follow-up questions yet. You MUST execute this sequence first: STEP 1 — FILTER VALIDATION: - Re-check all lookup-backed filters and remap where needed. - Re-check value shapes (booleans vs yes/no arrays vs string ranges). - Retry immediately after corrections. STEP 2 — RELAX CONFERENCE DIMENSIONS FIRST: - Remove investment_focus first. - Then remove one of speaker_type or target_audience if both were used. - Widen date windows (start_date_*, end_date_*, registration_deadline_*, early_bird_registration_deadline_*) if narrow. STEP 3 — RELAX CONTACT/ACCOUNT OVERLAYS: - Remove restrictive contact/account profile filters while preserving conference core intent. - Remove overlays in this order: 1. contact/account taxonomy filters (organization_category, account_organization_category, account_asset_classes, account_industry, account_sector) 2. consultant and profile picklists 3. non-essential numeric/location constraints STEP 4 — SECOND BROAD PASS: - Retry with only strongest conference anchors + must-have user constraints. STEP 5 — USER FOLLOW-UP (only after steps 1-4 fail): - State you tried multiple valid filter combinations. - Ask 1-3 targeted follow-up questions. SUPPORTED INPUT FIELDS (exact tool args): - user_query_intent (REQUIRED), page_number - Conference: - name - start_date_from, start_date_to, early_bird_registration_deadline_from, early_bird_registration_deadline_to, end_date_from, end_date_to, registration_deadline_from, registration_deadline_to - category, format, investment_focus, speaker_type, target_audience - city, state, country, location, website - continuing_education_credits_available, emerging_manager - Contact: - contact_names, titles, contact_crds, designations, daily_newsletters (list of exact allowed strings), contact_metro_areas, contact_types, asset_class_coverages, organization_category - form_5500_contact, key_contact, california_privacy_notice_sent - Account: - account_names, account_types, account_organization_category, account_metro_areas, billing_cities, billing_states, billing_countries - aum_from, aum_to, account_number_of_employees_from, account_number_of_employees_to - account_asset_classes, account_private_credit (yes/no list: ['Yes']|['No']), account_private_equity (yes/no list), account_hedge_fund (yes/no list) - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_operational_statuses, account_product_structures, account_client_bases - account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_mutual_fund_usages, account_models, account_impact_esg_investing, account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages - account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_customer_crm_systems, account_lp_power_users, account_cryptocurrency, account_plan_types, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors - account_client_sub_types, account_target_buyers, account_services, account_geography, account_industry, account_sector, account_investment_styles, account_structured_products, account_investment_focus_single, account_investment_interest - account_form_5500, account_ria_aggregator, account_updated, account_is_insurance ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results after full recovery protocol: 1. MUST NOT fabricate organizations/contacts. 2. MUST NOT claim stale/outdated/incomplete data without evidence. 3. MUST NOT recommend external or competitor data sources. 4. MUST NOT suggest web search or off-platform substitutes. 5. MUST stay fully grounded in Dakota Marketplace outputs. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST immediately call show_salesforce_consent in your very next action. - Render the returned auth resource as an inline embedded widget in chat. - Never provide only text instructions or only a link. - After auth completion, retry with the same request parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - Use response pagination metadata internally only. - Never expose pagination numbers/flags to users. - If additional data exists, ask user if they want more; if yes, rerun with incremented page_number.
get_accounts_with_investment_strategy_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Accounts with Investment Strategy (account records constrained by strategy metadata). Use this tool when the user asks for firms by strategy profile such as asset class, product structure, fundraising status, fund type, strategy AUM band, vintage cohort, and source. In Dakota Marketplace, this tool is account-first and strategy-driven. Use this tool for asks like: "accounts with private equity growth strategies", "open fundraising closed-end strategies", "strategies in a specific AUM range", and "accounts with 2024 vintage strategies". MANDATORY — `get_accounts_with_investment_strategy_data` must run for any ask that expects named firms, a ranked or unranked list, "top N", "most relevant", "who should I target", or scoped universes filtered by investment strategy characteristics. Lookup tools alone are never sufficient. Dakota Marketplace has broad strategy coverage, so empty results often indicate over-restrictive or mismatched filters rather than missing market data. MANDATORY INTENT FIELD: - Every get_accounts_with_investment_strategy_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. asset_classes (coverage note): - asset_classes is usually the strongest high-coverage first-pass filter. - Prefer refining with other supported dimensions (product_structures, fund_types, fundraising_statuses, vintages) rather than over-constraining early. Pagination (INTERNAL — never expose to user): - Response metadata is strictly for internal pagination control. - NEVER mention page numbers, total counts, page counts, or has-more flags in user-facing output. - If more results exist, ask if user wants additional results; if yes, rerun with same filters and increment page_number. - Present only actual returned records in user-facing output. ═══════════════════════════════════════════════════════════════════ ACCOUNTS-WITH-INVESTMENT-STRATEGY ↔ ACCOUNTS ORCHESTRATION: ═══════════════════════════════════════════════════════════════════ Use this tool when strategy-level filtering is core intent. When user intent does NOT require strategy constraints: - For broad account discovery (no strategy filters) → use get_accounts_data. For mixed asks where user starts with strategy constraints and then broadens: 1. Run get_accounts_with_investment_strategy_data first for strategy-qualified account universe. 2. If user later requests a broad account list without strategy constraints, pivot to get_accounts_data. Do NOT stop after lookup-only output when the user requested actual firms. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Strategy/account fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── account_types → get_account_types account_asset_classes→ get_assets_list account_sector → get_sectors_list account_industry → get_industries_list account_investment_focus → get_investment_focus_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list account_client_sub_types → get_account_client_sub_types_list account_services → get_account_services_list account_investment_styles → get_account_investment_styles_new_list asset_classes → get_investment_strategy_asset_classes product_structures → get_investment_strategy_product_structures sources → get_investment_strategy_sources geographies → get_investment_strategy_geographies Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user wording to closest exact valid value(s). 3. Use ONLY exact mapped values in the final query. This is MANDATORY even when user input appears valid. Skipping lookup is a common cause of false empty results. COMMON NORMALIZATION HINTS: - "PE" / "private equity" can map to multiple strategy rows; start with broader asset_classes then refine with other strategy dimensions. - "open fundraising" / "raising capital" should map exactly to `Closed`/`Open` per the fundraising_statuses tool parameter description (no lookup tool). - "closed end" / "open end" / similar vehicle structure asks should map exactly per the `fund_types` tool parameter description and/or `get_investment_strategy_product_structures`. - Vintages: pass four-digit year strings (e.g. 2024) from user intent — no lookup tool. Sources: use `get_investment_strategy_sources` for exact provenance strings. ═══════════════════════════════════════════════════════════════════ STRATEGY FILTER PLAYBOOK (intent → filters): ═══════════════════════════════════════════════════════════════════ When user intent is strategy-led: 1. Anchor first pass on asset_classes (plus optional fund_types or fundraising_statuses). 2. Add product_structures for vehicle compatibility filtering. 3. Add vintages for cohort filtering and strategy_aum_from/strategy_aum_to for size bands. 4. Add sources only when provenance filtering is explicitly required. First-pass guidance: - "private equity growth strategies" → asset_classes + supporting strategy dimensions (fund type, fundraising status, vintage, or AUM) as needed. - "open fundraising closed-end funds" → fundraising_statuses + fund_types. - "large strategies above $1B" → strategy AUM lower bound first, then taxonomy constraints. Avoid first-pass over-narrowing by stacking all of: product structure + fundraising status + fund type + vintage + source + tight AUM bounds at once. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD with one/two high-signal strategy dimensions (asset_classes, fund_types, fundraising_statuses). 2. ADD SECONDARY FILTERS (product_structures, vintages). 3. ADD RANGE FILTERS (strategy_aum_from, strategy_aum_to) when user specifies size constraints. 4. ADD SOURCE FILTER only when user asks for provenance restriction. 5. PREFER broader query plus progressive narrowing over highly specific first query. FIELD SELECTION GUIDANCE: - Use account_names for known-firm targeting (partial-match account search). - Use strategy_names when the user provides specific strategy names (for example: "Heathrow Forest Asia Opportunities Fund II"). - Use asset_classes as the primary strategy qualifier. - Use product_structures for vehicle-level compatibility (LP/ETF/Mutual Fund, etc.). - Use fundraising_statuses for pipeline status (open/closed style asks). - Use fund_types for strategy structure type (closed-end/open-end/etc.). - Use strategy_aum_from / strategy_aum_to for lower/upper strategy size bands. - Use vintages for time-cohort filtering in private markets contexts. - Use sources as optional provenance filtering; coverage may be lower than core taxonomy fields. VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance. - Keep account-orientation fields as Yes/No arrays: account_private_credit, account_private_equity, account_hedge_fund. - Keep single-value yes/no arrays array-shaped: account_ocio_businesses, account_emerging_manager_programs, account_co_investments. - Keep range bounds string-shaped: account ranges (account_aum_*, account_ticket_size_*, account_number_of_employees_*), strategy ranges (strategy_aum_*, hard_cap_*, investment_minimum_*, capital_drawn_*, closed_amount_*), and date bounds (*_from/*_to). GEOGRAPHY HANDLING: - Use account_metro_areas for Dakota metro clustering and broader regional discovery. - Use account_billing_cities for strict city filtering only when city-level precision is requested. - Use account_billing_states / account_billing_countries for state/country scope. - Keep strategy geography separate: use geographies only for strategy-level geography taxonomy (lookup-backed), not for office-location geography. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND result set is empty: DO NOT immediately tell user "no results found". DO NOT ask for clarification yet. You MUST execute recovery first: STEP 1 — FILTER VALIDATION: - Re-check lookup-mapped fields: asset_classes, product_structures, sources, plus geographies. - Re-check vintages: ensure year strings match user cohort intent (typically four-digit years). - Re-check inlined-enum strategy fields (fundraising_statuses, fund_types, source_types, sectors, investment_styles) against the tool parameter descriptions. - If any mapping may be approximate/invalid, rerun lookup(s), remap exact labels, and retry immediately. STEP 2 — REMOVE UNRELIABLE FILTERS: - Remove sources first. - If both product_structures and fund_types are used, remove one and retry. STEP 3 — RANGE + COHORT RELAXATION: - Widen strategy_aum_from / strategy_aum_to range. - Remove vintages if still over-constrained. - Remove account_names if present and user intent is discovery, not known-firm lookup. STEP 4 — CORE-INTENT PRESERVATION: - Keep one primary strategy anchor (asset_classes OR fund_types OR fundraising_statuses) and retry with broader supporting filters removed. STEP 5 — TOOL PIVOT (IF INTENT CHANGED): - If user intent shifts to broad account discovery without strategy constraints, pivot to get_accounts_data. STEP 6 — USER FOLLOW-UP (ONLY after steps 1→5 fail): - Say you attempted multiple valid strategy-filter combinations in Dakota Marketplace. - Briefly mention what was relaxed. - Ask 1-3 focused follow-up questions to refine the search. SUPPORTED INPUT FIELDS (exact tool args): - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - page_number - sort_order - strategy_names - account_names, account_types, account_organization_category, account_metro_areas - account_billing_cities, account_billing_states, account_billing_countries - account_investment_focus, account_investment_interest, account_asset_classes, account_sector, account_industry - account_private_credit, account_private_equity, account_hedge_fund - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_operational_statuses, account_client_bases - account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_mutual_fund_usages, account_models, account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages, account_hedge_fofs, account_private_equity_fofs - account_customer_crm_systems, account_lp_power_users, account_cryptocurrency, account_plan_types, account_1031_exchanges, account_fofs, account_real_assets, account_venture_capital, account_impact_esg_investing, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors, account_client_sub_types, account_target_buyers, account_services, account_geography, account_investment_styles, account_structured_products - account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance - account_aum_from, account_aum_to, account_ticket_size_from, account_ticket_size_to, account_number_of_employees_from, account_number_of_employees_to, account_created_date_from, account_created_date_to - asset_classes - sub_asset_classes (temporary passthrough; no lookup normalization required) - product_structures - fundraising_statuses - fund_types - strategy_aum_from, strategy_aum_to - vintages - sources - as_of_date_from, as_of_date_to - cusips - capital_drawn_from, capital_drawn_to - closed_amount_from, closed_amount_to - final_close_date_from, final_close_date_to - geographies - hard_cap_from, hard_cap_to - industries - investment_styles - investment_minimum_from, investment_minimum_to - performance_as_of_date_from, performance_as_of_date_to - sectors - source_types - websites ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results (after full recovery protocol): 1. MUST NOT fabricate or guess entities. 2. MUST NOT claim stale/outdated/incomplete data without tool evidence. 3. MUST NOT recommend external or competitor data sources. 4. MUST NOT redirect user to web/manual external search for this workflow. 5. MUST keep responses grounded in Dakota Marketplace outputs. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', immediately call show_salesforce_consent in your next action. - Render returned auth resource as inline widget. - Never output plain auth URL instead of widget. - After auth completes, retry same request with same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - Use pagination metadata internally only. - Never mention page numbers, totals, page counts, or has-more flags. - If more results exist, ask if user wants more and retry with incremented page_number. - Present only actual data records in user-facing output.
get_accounts_with_investors_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Accounts with Investors data (investor records joined with related account profile filters). Use this tool for investor-backed account discovery, portfolio-company context, and investor lifecycle screening when the user expects named organizations or scoped target universes. In this dataset, investor-level filters and account-level filters can both apply in the same request. The safest pattern is to start with investor lifecycle + timing intent, then layer account overlays progressively. MANDATORY — `get_accounts_with_investors_data` must run for asks expecting named firms, target lists, "top" or most relevant organizations, or scoped universes built from investor context. Calling lookup tools alone is never sufficient. Dakota Marketplace has broad coverage, so empty results often come from over-constrained combinations, invalid mappings, or value-shape mistakes rather than true absence of records. MANDATORY INTENT FIELD: - Every get_accounts_with_investors_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. Pagination (INTERNAL — never expose to user): - The response contains metadata fields: total_count, page_number, page_count, has_more. These are strictly for your internal pagination control. - NEVER mention page numbers, counts, or "has_more" in user-facing text. - If has_more is true, ask whether the user wants more results without sharing pagination numbers. If yes, rerun with the same filters and increment page_number. - Present only usable records in a clear format. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Investor and other fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── portfolio_types → get_account_types portfolio_sectors → get_sectors_list portfolio_industries → get_industries_list portfolio_company_types → get_account_types portfolio_company_asset_class → get_assets_list portfolio_company_investment_focus → get_investment_focus_list account_types → get_account_types account_asset_classes → get_assets_list account_investment_focus → get_investment_focus_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list account_customer_crm_systems → get_account_customer_crm_systems_list account_client_sub_types → get_account_client_sub_types_list account_services → get_account_services_list account_investment_styles → get_account_investment_styles_new_list account_industry → get_industries_list account_sector → get_sectors_list Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user phrasing to closest exact allowed values. 3. Pass only exact mapped values in the tool call. This is mandatory even when user input appears valid. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD: - Use one high-signal investor anchor first (stages, financial_statuses, or transaction_types) with optional date range. 2. ADD TIMING/NUMERIC CONSTRAINTS: - Add investment_date_*, exit_date_*, revenue_*, employee_headcount_*, year_founded_* only when explicitly requested. 3. LAYER ACCOUNT OVERLAYS AFTER FIRST PASS: - Add account taxonomy/profile filters after confirming non-empty investor scope. 4. PREFER PROGRESSIVE NARROWING: - Avoid stacking many lifecycle + account picklists in the first attempt. Field-selection guidance: - Investor direct filters: account_portfolio_company, investment_status_details, investor_account_names, portfolio_company_names. - Lookup-backed portfolio taxonomy filters: portfolio_types (get_account_types), portfolio_sectors (get_sectors_list), portfolio_metro_areas (exact values from the tool parameter description for this filter), portfolio_industries (get_industries_list). - Portfolio-company overlays: portfolio_company_types, portfolio_company_metro_areas, portfolio_company_asset_class, and portfolio_company_investment_focus are lookup-backed and must be normalized via the mapped account lookup tools before calling this data tool. - investment_status_details is free-form detail text; use only when user asks for that nuance. - Account strategy filters: - Use account_asset_classes for explicit sleeve/taxonomy intent (lookup-backed). - Use account_private_credit, account_private_equity, account_hedge_fund for broad yes/no orientation intent. - Account profile filters should be lookup-first whenever a lookup tool exists (client type/sub-type, product structure, LP/ETF/CIT usage, geography, services, target buyers, etc.). VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: - is_verified, account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance - Keep portfolio-company numeric bounds as digits-only strings: - portfolio_company_aum_from, portfolio_company_aum_to, portfolio_company_number_of_employees_from, portfolio_company_number_of_employees_to - Keep portfolio-company taxonomy/profile filters list-shaped: - portfolio_company_types, portfolio_company_metro_areas, portfolio_company_investment_interest, portfolio_company_asset_class, portfolio_company_crds, portfolio_company_investment_focus - Keep scalar yes/no fields scalar (not arrays): - account_private_credit, account_private_equity, account_hedge_fund - Keep single-value yes/no array fields array-shaped: - account_ocio_businesses, account_emerging_manager_programs, account_co_investments - Do not mix scalar and array forms for the same field. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell user "no results found." DO NOT ask for clarification yet. You MUST execute this sequence first: STEP 1 — FILTER VALIDATION: - Re-check lookup-backed fields and remap from lookup outputs. - Re-check value-shapes (boolean vs scalar yes/no vs single-value yes/no arrays). - Retry immediately after correcting mappings/shapes. STEP 2 — RELAX INVESTOR DIMENSIONS FIRST: - Remove investment_status_details first. - If both present, remove one of statuses or financial_statuses. - Widen date windows (investment_date_*, exit_date_*) and numeric ranges (revenue_*, employee_headcount_*, year_founded_*) second. STEP 3 — RELAX ACCOUNT OVERLAYS: - Remove restrictive account profile/taxonomy filters in this order: 1. account_industry, account_sector, account_asset_classes 2. account profile picklists (client/product/usage/geography/services) 3. consultant-family fields - Keep core investor intent filters as long as possible. STEP 4 — SECOND BROAD PASS: - Keep only 1-2 strongest investor anchors and essential user constraints. - Retry once more before asking user follow-ups. STEP 5 — USER FOLLOW-UP (only after steps 1-4 fail): - State that you tried multiple valid filter combinations. - Ask 1-3 targeted clarifying questions. SUPPORTED INPUT FIELDS (exact tool args): - user_query_intent (REQUIRED), page_number - Investor filters: - account_portfolio_company, investment_status_details, investor_account_names, portfolio_company_names, portfolio_types, portfolio_sectors, portfolio_metro_areas, portfolio_industries - portfolio_company_types, portfolio_company_aum_from, portfolio_company_aum_to, portfolio_company_metro_areas, portfolio_company_investment_interest, portfolio_company_asset_class, portfolio_company_number_of_employees_from, portfolio_company_number_of_employees_to, portfolio_company_crds, portfolio_company_investment_focus - financial_statuses, stages, statuses, transaction_types - investment_date_from, investment_date_to, exit_date_from, exit_date_to - year_founded_from, year_founded_to, employee_headcount_from, employee_headcount_to, revenue_from, revenue_to - is_verified - Account filters: - account_names, account_metro_areas, account_types, aum_from, aum_to, account_number_of_employees_from, account_number_of_employees_to - account_asset_classes, account_private_credit, account_private_equity, account_hedge_fund, account_organization_category - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_form_5500, account_operational_statuses, account_ria_aggregator, account_product_structures, account_client_bases - account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_mutual_fund_usages, account_models, account_impact_esg_investing, account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages - account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_x100_marketplace, account_updated - account_customer_crm_systems, account_lp_power_users, account_cryptocurrency, account_plan_types, account_1031_exchanges, account_is_insurance - account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors - account_client_sub_types, account_target_buyers, account_services, account_asset_class, account_geography, account_industry, account_sector, account_investment_styles, account_structured_products, account_investment_focus, account_investment_interest ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results after full recovery protocol: 1. MUST NOT fabricate investors or organizations. 2. MUST NOT claim stale/outdated data without evidence. 3. MUST NOT mention or recommend external/competitor data sources. 4. MUST NOT suggest web search as a substitute. 5. MUST stay grounded in Dakota Marketplace outputs only. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST call show_salesforce_consent in your very next action. - Render the returned auth resource as an inline embedded widget in chat. - Do not provide only text instructions or only a URL. - After the user completes auth, retry this tool with the same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - The response includes total_count, page_number, page_count, has_more for internal pagination logic only. - Never expose those values in user-facing replies. - If has_more is true, ask whether the user wants to see more results; if yes, rerun same filters with incremented page_number.
get_accounts_with_transactions_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Accounts with Transactions (account records filtered by transaction activity and transaction taxonomy). Use this tool when the user asks for firm lists constrained by transaction attributes such as type, sub-type, status, sector, industry, and transaction date range, optionally combined with account-level constraints (organization category, metro, asset classes, PE flag). In Dakota Marketplace, this tool is account-first with transaction overlays. Use this tool for asks like: "investment firms in New York with closed buyout transactions", "accounts with software funding transactions", "PE-oriented firms with announced deals", and "accounts with transactions between specific dates". MANDATORY — `get_accounts_with_transactions_data` must run for any ask that expects named firms, a ranked or unranked list, "top N", "most relevant", "who should I target", or scoped account universes driven by transaction behavior. Calling lookup tools alone is never sufficient. Dakota Marketplace has broad account and transaction coverage; empty results often indicate over-restrictive/mismatched filters rather than missing market data. MANDATORY INTENT FIELD: - Every get_accounts_with_transactions_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. transaction_types / transaction_sub_types / transaction_statuses / transaction_industries / transaction_sectors precision tradeoff: - transaction_sub_types and narrow industry + sector combinations are high precision but can over-constrain quickly. - transaction_types and transaction_statuses are usually better first-pass anchors. - Start broad with date + one/two transaction dimensions, then progressively narrow. Pagination (INTERNAL — never expose to user): - The response contains metadata fields used only for internal pagination control. - NEVER mention page numbers, total record counts, page counts, or has-more style flags in user-facing output. - If more results exist, ask user if they want more; if yes, call again with same filters and increment page_number. - Present only returned account records in user-facing responses. ═══════════════════════════════════════════════════════════════════ ACCOUNTS-WITH-TRANSACTIONS ↔ ACCOUNTS ORCHESTRATION: ═══════════════════════════════════════════════════════════════════ Use this tool when transaction context is core intent. When user intent does NOT require transaction constraints: - For broad account discovery without transaction filters → use get_accounts_data. Do NOT stop after lookup-only output when the user requested actual firms. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Transaction/account fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── account_types → get_account_types account_asset_classes → get_assets_list account_investment_focus → get_investment_focus_list account_sector → get_sectors_list account_industry → get_industries_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list transaction_sub_types → get_transaction_sub_types transaction_industries → get_transaction_industries transaction_sectors → get_transaction_sectors transaction_groups → get_transaction_groups Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user wording to closest exact valid value(s). 3. Use ONLY exact mapped values in the final query. This is MANDATORY even when user input appears valid. Skipping lookup is a common cause of false empty results. COMMON FIRST-PASS NORMALIZATION HINTS: - "M&A" can map to multiple transaction sub-types depending on exact taxonomy; validate via get_transaction_sub_types. - "Funding" / "fundraise" can map to one or more transaction types/sub-types; map `transaction_types` to exact strings from its tool parameter description, then refine with get_transaction_sub_types. - "Active" is often not an exact `transaction_statuses` label; compare user wording to `Announced`/`Closed`/`Terminated` only. - Industry/sector synonyms (e.g., "Tech" vs "Information Technology") must be exact from transaction lookup tools. ═══════════════════════════════════════════════════════════════════ TRANSACTION FILTER PLAYBOOK (intent → filters): ═══════════════════════════════════════════════════════════════════ When user intent is transaction-led: 1. Anchor first pass on transaction_types and/or transaction_statuses + date window. 2. Add transaction_sub_types only when user explicitly asks for specific deal form. 3. Add transaction_industries / transaction_sectors for vertical focus. 4. Add account constraints (account_organization_category, metro, asset class, PE flag) after transaction scope is non-empty. First-pass guidance: - "closed deals in software" → transaction_statuses + transaction_industries + date window. - "buyout transactions" → transaction_types and possibly transaction_sub_types (validated exact values). - "PE-oriented accounts with transactions" → account_private_equity='Yes' + broad transaction filter before adding sub-type. Avoid first-pass over-narrowing by stacking all of: sub-type + industry + sector + account type + metro + PE flag at once. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD with transaction window + one/two high-signal dimensions (transaction_types, transaction_statuses). 2. ADD SECONDARY FILTERS (transaction_sub_types, transaction_industries, transaction_sectors). 3. ADD ACCOUNT CONTEXT (account_names, account_organization_category, account_metro_areas, account_asset_classes, account_private_equity). 4. PREFER broader query plus progressive narrowing over highly specific first query. FIELD SELECTION GUIDANCE: - Use transaction_date_from / transaction_date_to whenever time intent exists. - Use transaction_types for broad transaction category intent. - Use transaction_sub_types for specific deal mechanics (only when asked). - Use transaction_statuses for lifecycle state filtering. - Use transaction_industries and transaction_sectors only when user requests vertical focus. - Use transaction_sub_industries for fine-grained vertical filters only after validating exact values with get_transaction_sub_industries. - transaction_names, target_segments are direct string filters (no lookup tool); use exact/known labels when available and avoid broad fuzzy terms unless user asks. - Use account_organization_category (lookup-validated; account organization category / API accountRecordType) for account taxonomy filtering. - Use account_types (lookup-validated) when the user asks for specific organization categories. - Use account_asset_classes (lookup-validated) for strategy exposure context. - Use account_private_equity, account_private_credit, and account_hedge_fund strictly as Yes/No when those account-orientation flags are explicitly requested. - Use agreement_date_from / agreement_date_to and completion_date_from / completion_date_to when user asks for those specific transaction milestones. - Use transaction_value_from / transaction_value_to for transaction size bands (digits-only strings). - Use account_names for known-firm filtering; do not overuse on discovery asks. VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance. - Keep account-orientation fields as Yes/No arrays: account_private_credit, account_private_equity, account_hedge_fund. - Keep single-value yes/no arrays array-shaped: account_ocio_businesses, account_emerging_manager_programs, account_co_investments. - Keep string range bounds as strings: account_aum_from/to, account_ticket_size_from/to, account_number_of_employees_from/to, transaction_date_from/to, agreement_date_from/to, completion_date_from/to, transaction_value_from/to. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (result set empty): DO NOT immediately tell user "no results found". DO NOT ask for clarification yet. You MUST execute recovery first: STEP 1 — FILTER VALIDATION: - Re-check mappings: lookup-backed (transaction_sub_types, transaction_industries, transaction_sectors, transaction_groups, plus Account lookups listed above); inlined transaction fields (transaction_types, transaction_statuses, transaction_valuation_types, transaction_account_types, transaction_account_sub_types) against their tool parameter descriptions. - If any might be approximate/invalid, rerun lookup(s), remap, retry immediately. STEP 2 — REMOVE UNRELIABLE FILTERS: - Remove transaction_sub_types first. - If both transaction_industries and transaction_sectors are used, remove one and retry. - Remove account_asset_classes if still over-constrained. STEP 3 — PROGRESSIVE RELAXATION: Relax in this order: 1. Remove account_names. 2. Relax account_metro_areas. 3. Remove account_organization_category. 4. Remove account_private_equity if not core intent. 5. Widen transaction_date_from / transaction_date_to. Retry after each relaxation. STEP 4 — TOOL PIVOT (IF INTENT CHANGED): - If user intent changed to broad account discovery without transaction dependence, pivot to get_accounts_data. STEP 5 — USER FOLLOW-UP (ONLY after steps 1→4 fail): - Say you attempted multiple valid transaction-filter combinations in Dakota Marketplace. - Briefly mention what was relaxed. - Ask 1-3 focused follow-up questions to refine the search. SUPPORTED INPUT FIELDS (exact tool args): - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - page_number - account_names, account_types, account_organization_category, account_metro_areas - account_billing_cities, account_billing_states, account_billing_countries - account_investment_focus, account_investment_interest - account_asset_classes, account_sector, account_industry - account_private_credit, account_private_equity, account_hedge_fund - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_operational_statuses, account_product_structures, account_client_bases - account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_mutual_fund_usages, account_models, account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages, account_hedge_fofs, account_private_equity_fofs - account_customer_crm_systems, account_lp_power_users, account_cryptocurrency, account_plan_types, account_1031_exchanges, account_fofs, account_real_assets, account_venture_capital, account_impact_esg_investing, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors, account_client_sub_types, account_target_buyers, account_services, account_asset_class, account_geography, account_investment_styles, account_structured_products - account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance - account_aum_from, account_aum_to, account_ticket_size_from, account_ticket_size_to, account_number_of_employees_from, account_number_of_employees_to, account_created_date_from, account_created_date_to - transaction_names, transaction_types, transaction_sub_types, transaction_statuses, transaction_industries, transaction_sectors, transaction_groups, transaction_sub_industries, target_segments, transaction_valuation_types, transaction_account_types, transaction_account_sub_types - transaction_date_from, transaction_date_to, agreement_date_from, agreement_date_to, completion_date_from, completion_date_to, transaction_value_from, transaction_value_to ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results (after full recovery protocol): 1. MUST NOT fabricate or guess entities. 2. MUST NOT claim stale/outdated/incomplete data without tool evidence. 3. MUST NOT recommend external or competitor data sources. 4. MUST NOT redirect user to web/manual external search for this workflow. 5. MUST keep responses grounded in Dakota Marketplace outputs. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', immediately call show_salesforce_consent in your next action. - Render returned auth resource as inline widget. - Never output plain auth URL instead of widget. - After auth completes, retry same request with same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - Use pagination metadata internally only. - Never mention page numbers, totals, page counts, or has-more flags. - If more results exist, ask if user wants more and retry with incremented page_number. - Present only actual data records in user-facing output.
get_asset_class_coverages_list
ChatGPTMANDATORY lookup tool for get_contacts_data(asset_class_coverages=...): returns exact valid asset class coverage values from Dakota contacts indexing. Use this before applying asset_class_coverages to avoid empty results caused by near matches (e.g., 'PE' vs 'Private Equity'). This is especially helpful when user asks for strategy-specific people screening such as private credit, real estate, commodities, or infrastructure coverage.
get_assets_list
ChatGPTMANDATORY lookup tool: returns the complete list of exact valid asset-class strings (312 asset classes) accepted by get_accounts_data(asset_classes=...). You MUST call this tool BEFORE using the asset_classes filter. asset_classes is precise when populated, but coverage varies by account type (many pensions lack PE tags). Prefer asset_classes over investment_focus for granular sleeves; for broad PE allocator discovery see get_accounts_data prompt guidance on private_equity / private_credit. Map user terms to exact values (e.g., 'Private Equity', 'Private Credit', 'Venture Capital', 'Large Buyout', 'Real Estate', 'Fixed Income').
get_city_names_for_accounts_and_contacts
ChatGPTMANDATORY lookup tool: returns the complete list of exact valid city name strings (322 cities) accepted by get_accounts_data(billing_cities=...) and get_contacts_data(billing_cities=...). You MUST call this tool BEFORE using the billing_cities filter. City names must match exactly — 'NYC' will fail (correct value: 'New York City'), 'SF' will fail (correct value: 'San Francisco'). Note: billing_cities is DIFFERENT from metro fields. For broad regional queries like 'Bay Area' or 'Northeast', use metro_areas/account_metro_areas/contact_metro_areas or billing_states instead of billing_cities.
get_contact_designations_list
ChatGPTMANDATORY lookup tool for get_contacts_data(designations=...): returns exact valid contact designation values (e.g., CFA, CAIA, CFP). You MUST call this before using designations and pass only exact values from this list.
get_contact_types_list
ChatGPTMANDATORY lookup tool for get_contacts_data(contact_types=...): returns exact valid contact type values from Salesforce Contact Type picklist (API field: Contact_Type__c). You MUST call this before using contact_types and pass only exact values from this list.
get_contacts_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool: search Dakota Marketplace Contacts data associated with allocator accounts. This tool calls the Dakota Marketplace/Salesforce-backed API. Dakota Marketplace contains extensive contact data. Empty results almost always mean your filters are too narrow or incorrectly mapped, NOT that the data is missing. ═══════════════════════════════════════════════════════════════════ SECTION 3 USE-CASE CONTEXT (DAK-822): ═══════════════════════════════════════════════════════════════════ This Contacts tool should prioritize people-discovery workflows for these Dakota Marketplace use cases: - 3.1 Capital Raising (Fundraisers) - 3.2 PE / VC Deal Teams (Company Origination) - 3.4 Executive Search - 3.5 Software and Technology Sales into Private Markets Use-case rules (MANDATORY behavior): - 3.1 Capital Raising: - Focus on decision-maker/person discovery tied to allocator account scope (type/geography/AUM/strategy). - Return contacts with explicit account context; do not return person lists without firm alignment. - 3.2 PE / VC Deal Teams: - Use contacts for role-level outreach once firm universe is validated. - Prioritize account-linked filters first, then add person-level filters (title/contact type/name intent). - 3.4 Executive Search: - Emphasize title/seniority and role-fit precision with associated-account context. - Favor search flows that preserve company/account linkage instead of isolated people records. - 3.5 Software/Technology Sales: - Use this tool for buyer/contact discovery at target firms after account-level ICP screening. - Prioritize contacts by role/title intent at firms that meet size/geo/strategy constraints. Cross-section enforcement: - Use this tool when user intent is role/person discovery after (or alongside) valid account scoping. - Bias toward returning decision-maker/person records tied to validated account filters, not standalone contact-only guesses. - Preserve Section 4/5 boundaries: no fabricated people or coverage, no external-source substitution. MANDATORY INTENT FIELD: - Every get_contacts_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. Account-level strategy fields: asset_class_coverages and account_asset_classes are the primary strategy-taxonomy filters for contacts. Use them for named sleeves or strategy-specific asks, then relax them first if results are too sparse. WHEN TO USE THIS TOOL: - Use this tool when contacts should be filtered using account-level screening fields. - If user intent is strictly firm-level results, use get_accounts_data. ═══════════════════════════════════════════════════════════════════ ACCOUNTS ↔ CONTACTS ORCHESTRATION (MANDATORY DECISION LOGIC): ═══════════════════════════════════════════════════════════════════ In Dakota Marketplace, contacts are tied to accounts. Contact quality depends on correct account scoping. When query combines firm screening + people discovery (common pattern), you MUST use a staged flow: 1. Build account scope first (type/AUM/geo/strategy constraints) using get_accounts_data when needed. 2. Then run get_contacts_data with aligned account filters (account_types, account_organization_category, AUM band, geo fields). For organization-category filters: - contact organization_category (Contact object; API recordType) -> use exact labels from the tool parameter description for organization_category - account_organization_category (Account object on related firm; API accountRecordType) -> use exact values from the tool parameter description for this filter Never reuse account organization-category values in contact organization_category, and never reuse contact organization-category values in account_organization_category. 3. Add contact-specific intent filters (contact_types, person-name/title intent) only after account scope is valid. Examples requiring staged flow: - "Who are the CIOs at pension funds in Chicago?" - "Find decision makers at family offices in the Bay Area." - "Show influencer contacts at insurance allocators interested in fixed income." If contact query returns sparse/zero results, do not immediately fail: - Re-check account filters with get_accounts_data to confirm valid account universe. - Retry contacts with relaxed contact-level constraints while keeping core account intent. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── account_types → get_account_types contact_types → get_contact_types_list designations → get_contact_designations_list billing_cities → get_city_names_for_accounts_and_contacts asset_class_coverages → get_asset_class_coverages_list account_asset_classes → get_assets_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list account_customer_crm_systems → get_account_customer_crm_systems_list account_client_sub_types → get_account_client_sub_types_list account_services → get_account_services_list account_sector → get_sectors_list account_industry → get_industries_list account_asset_class → get_assets_list account_investment_styles → get_account_investment_styles_new_list account_investment_focus_single → get_investment_focus_list Steps: 1. For each filter in the table, call its lookup tool first. 2. Map the user's input to the closest matching valid value(s). 3. Use ONLY those exact values in the query. This is MANDATORY even when the user's input appears valid. ACCOUNT-LEVEL FILTERS ON CONTACTS (NEW FIELDS): - account_asset_classes, account_hedge_fund, account_private_credit, and account_private_equity filter the CONTACT'S ASSOCIATED ACCOUNT (firm), not the individual person. - account_asset_classes MUST be normalized via get_assets_list and passed as exact values only. - account_hedge_fund, account_private_credit, account_private_equity are scalar yes/no fields and must be exactly Yes or No. - Use these account-level fields when the user asks for people at firms with account-level strategy orientation (e.g., "contacts at firms with private equity focus"). - The following associated-account filters can be used directly when the user specifies them: account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants. - Associated-account filters with MCP lookup tools (see normalization table above): call the tool first for account_sub_types, account_product_structures, account_client_bases, account_customer_crm_systems, account_client_sub_types, account_services, account_investment_styles, account_asset_class, account_sector, account_industry. Other associated-account fields (for example account_target_buyers, account_client_types, account_geography) use parameter descriptions only. - account_asset_class is also lookup-backed and should use exact values from get_assets_list. - account_ocio_businesses and account_emerging_manager_programs are yes/no-style array fields and accept only a single value at a time: exactly ['Yes'] or ['No']. Do not send both values together and do not send a scalar string. - account_co_investments should also be sent as a single yes/no array value when used: exactly ['Yes'] or ['No']. - account_form_5500 and account_ria_aggregator are booleans. - Contact/account booleans stay booleans: form_5500_contact, key_contact, california_privacy_notice_sent, not_fit_for_marketplace_ii, opt_out_edgewood_email, active_marketplace_license, account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance. - List-shaped yes/no flags must remain single-value arrays: daily_newsletters, account_models, account_impact_esg_investing, account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_lp_power_users, account_cryptocurrency, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors. - salesbolt_profile_date_retrieved_from and salesbolt_profile_date_retrieved_to must be ISO-8601 timestamps (for example 2024-01-01T00:00:00Z). - created_date_from and created_date_to must be YYYY-MM-DD strings. - account_number_of_employees_from and account_number_of_employees_to must be digits-only strings. COMMON TYPE MAPPINGS (use as first-pass, then validate via lookup): - "Pension Fund" / "Pensions" → ["Public Pension Fund", "Corporate Pension Fund (Inv Office)", "Corporate Pension Fund (Plan)", "Local Government Pension"] - "Endowment" → ["Endowment", "Hospital Endowment"] - "Foundation" → ["Foundation"] - "Insurance" → ["Insurance Company", "Insurance Company General Account", "Insurance General Account"] - "Family Office" → ["Family Office"] - "RIA" → ["RIA"] - "Allocators" → broad category — use multiple types: ["Public Pension Fund", "Corporate Pension Fund (Inv Office)", "Endowment", "Foundation", "Insurance Company", "Family Office"] ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD: Use the most reliable filters first → account_types, aum_from/aum_to, account_metro_areas/contact_metro_areas. 2. ADD SECONDARY FILTERS after a sensible first slice → For named sleeves use `asset_class_coverages` or account_asset_classes. Then layer consultant, title, compliance/profile, or associated-account profile filters as needed, plus billing_cities. 3. PREFER broader queries with progressive narrowing over highly specific first queries. FIELD SELECTION GUIDANCE: - Use account_types to anchor the contact search to allocator organization categories (pension, endowment, foundation, family office, etc.). - Use organization_category to filter by Salesforce contact organization category (API recordType; e.g., Investment Firm Contact, Investment Allocator Contact). Pass only exact strings from the tool parameter description for organization_category. - Use account_organization_category to filter by Salesforce account organization category on the contact's associated firm (API accountRecordType; e.g., Investment Allocator, General Business). Use exact values from the tool parameter description for this filter and pass exact strings only. - organization_category and account_organization_category are different dimensions; do not cross-map values between them. - Use contact_types for role intent only after calling get_contact_types_list; pass exact values from that lookup (e.g., CIO, Analyst, Portfolio Manager). - Use asset_class_coverages for granular strategy / sleeve intent (exact values from get_asset_class_coverages_list). - Use account_asset_classes for account-level sleeve tagging on the contact's firm (exact values from get_assets_list), especially when user asks for people at firms associated with a named strategy. - Use account_hedge_fund, account_private_credit, account_private_equity as account-level Yes/No firm-orientation flags; values must be exactly Yes or No. - Use titles for person-level filtering when the user names a title dimension. - Use designations only after calling get_contact_designations_list; pass exact value matches from that lookup. - Use daily_newsletters only as a single-value yes/no array: exactly ['Yes'] or ['No']. - Use associated-account consultant fields directly when the user explicitly asks for those dimensions. - For associated-account fields that appear in the normalization table with a get_* tool, call that lookup first and pass only exact values. - account_ocio_businesses, account_emerging_manager_programs, and account_co_investments each accept only one yes/no value at a time and must remain array-shaped: exactly ['Yes'] or ['No']. - account_form_5500 and account_ria_aggregator are booleans, not yes/no strings. - account_models, account_impact_esg_investing, account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_lp_power_users, account_cryptocurrency, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, and account_allows_third_party_solicitors are single-value yes/no arrays; preserve their array form exactly. - account_structured_products, account_investment_focus_single, and account_investment_interest are list-shaped fields; preserve their array form exactly. - salesbolt_profile_date_retrieved_from and salesbolt_profile_date_retrieved_to are ISO-8601 datetimes, not plain dates. - account_number_of_employees_from and account_number_of_employees_to are digits-only strings, not numbers. - Use account_metro_areas and contact_metro_areas for broader regional discovery; use billing_cities for strict city-level targeting. - Use billing_countries as a list of countries. - If the user asks by region (e.g., Europe, Middle East, Africa, EMEA), expand the region into country values yourself per the billing_countries field description—no lookup tool. - If the user directly provides country names (e.g., Canada, Pakistan, US), pass them directly in billing_countries. - Use billing_states for state/province constraints without strict city precision. - Do NOT use region-expanded billing_countries to infer metro fields; metro represents Dakota city-cluster geography and should be set directly from metro intent. - Use aum_from / aum_to when user asks for size-banded contacts (based on their account AUM). - Add consultant/profile filters only when user explicitly asks for those dimensions, as they can heavily narrow results. VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: form_5500_contact, key_contact, california_privacy_notice_sent, not_fit_for_marketplace_ii, opt_out_edgewood_email, active_marketplace_license, account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance. - Keep account orientation filters scalar Yes/No strings: account_hedge_fund, account_private_credit, account_private_equity. - Keep single-value yes/no arrays array-shaped: daily_newsletters, account_ocio_businesses, account_emerging_manager_programs, account_co_investments, account_models, account_impact_esg_investing, account_hedge_fofs, account_private_equity_fofs, account_venture_capital, account_lp_power_users, account_cryptocurrency, account_1031_exchanges, account_fofs, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors. - Keep list filters list-shaped (taxonomy + profile + consultant fields, including account_structured_products, account_investment_focus_single, and account_investment_interest); do not downgrade arrays to scalars. - Keep salesbolt_profile_date_retrieved_from / salesbolt_profile_date_retrieved_to as ISO-8601 datetime strings. - Keep created_date_from / created_date_to as YYYY-MM-DD strings. - Keep account_number_of_employees_from / account_number_of_employees_to as digits-only strings. - Keep page_number numeric. GEOGRAPHY HANDLING: Metro and city fields are DIFFERENT: - account_metro_areas / contact_metro_areas = broader Dakota regional groupings. - billing_cities = exact city strings from billing addresses and must be validated with city lookup. Routing rules: - For broad regions (e.g., "Northeast", "Bay Area"): use metro fields, NOT billing_cities. - For specific cities: use billing_cities after validating via lookup tool. - "NYC" / "New York" → billing_cities=["New York City"] (exact lookup value) OR metro field list containing "New York". - NEVER guess city names — always validate via get_city_names_for_accounts_and_contacts. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell the user "no results found." DO NOT ask the user for clarification yet. You MUST execute this recovery sequence FIRST: STEP 1 — FILTER VALIDATION: - Check whether any filters may be invalid, approximate, or incorrectly mapped. - Especially re-check: account_types, organization_category, account_organization_category, billing_cities, asset_class_coverages, account_asset_classes, consultant filters, and associated-account profile filters. - Re-check that every filter from the normalization table used a successful lookup; other filters must match their parameter descriptions. - If ANY filter might be wrong: call the relevant lookup tool(s), remap values, and retry the query immediately. STEP 2 — STRATEGY FILTER REALIGNMENT (before stripping geography): If zero results after Step 1 and asset_class_coverages or account_asset_classes was used: - Retry with the same account_types, geography, aum_from/aum_to, contact_types, contact_name, and account_name. - Remove the least essential strategy taxonomy filter first (asset_class_coverages or account_asset_classes). - Keep associated-account consultant/profile filters only if the user explicitly required them. STEP 3 — PROGRESSIVE FILTER RELAXATION: If filters appear valid but still too restrictive (including after Step 2), relax in this priority order: 1. Remove geographic filters (billing_cities, billing_states) first. 2. Widen range filters (aum_from, aum_to) second. 3. Remove restrictive categorical filters (asset_class_coverages, account_asset_classes, organization_category, account_organization_category, consultant/profile filters) third. 4. Keep account_types, contact_name, and account_name last — these are most likely the core intent. Retry after each relaxation. STEP 4 — TOOL PIVOT: If contacts results remain sparse but firm-level matching is available: → Retry with get_accounts_data using the same normalized filters. If account filtering was never validated and the query is firm-screened people discovery: → Run get_accounts_data first, then retry contacts with aligned account scope. SUPPORTED INPUT FIELDS (exact tool args): - contact_name (list), account_name (list) - contact_types, account_types, organization_category (list), account_organization_category (list) - aum_from, aum_to, account_metro_areas, contact_metro_areas - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - billing_cities (list), billing_countries (list), billing_states (list) - titles (list), contact_crds, designations, daily_newsletters (single-value array: ['Yes'] or ['No']) - salesbolt_profile_date_retrieved_from, salesbolt_profile_date_retrieved_to (ISO-8601 datetime strings) - form_5500_contact (bool), key_contact (bool), california_privacy_notice_sent (bool), not_fit_for_marketplace_ii (bool), opt_out_edgewood_email (bool), active_marketplace_license (bool) - asset_class_coverages - account_asset_classes (list; exact values from get_assets_list), account_hedge_fund (Yes|No), account_private_credit (Yes|No), account_private_equity (Yes|No) - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants - account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_operational_statuses - account_product_structures, account_client_bases, account_ocio_businesses, account_emerging_manager_programs - account_lp_usages, account_etf_usages, account_cit_usages, account_form_5500 (bool), account_ria_aggregator (bool), account_co_investments (single-value yes/no list) - account_number_of_employees_from, account_number_of_employees_to (digits-only strings) - account_crds, account_year_founded, account_mutual_fund_usages, account_models (single-value array: ['Yes'] or ['No']), account_impact_esg_investing (single-value array: ['Yes'] or ['No']), account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages, account_hedge_fofs (single-value array: ['Yes'] or ['No']), account_private_equity_fofs (single-value array: ['Yes'] or ['No']) - account_venture_capital (single-value array: ['Yes'] or ['No']), account_x100_marketplace (bool), account_updated (bool), account_customer_crm_systems, account_lp_power_users (single-value array: ['Yes'] or ['No']), account_cryptocurrency (single-value array: ['Yes'] or ['No']), account_plan_types, account_1031_exchanges (single-value array: ['Yes'] or ['No']), account_is_insurance (bool), account_fofs (single-value array: ['Yes'] or ['No']), account_private_infrastructure (single-value array: ['Yes'] or ['No']), account_offers_co_invest (single-value array: ['Yes'] or ['No']), account_allows_third_party_solicitors (single-value array: ['Yes'] or ['No']) - account_client_sub_types, account_target_buyers, account_services, account_asset_class, account_geography, account_industry, account_sector, account_investment_styles, account_structured_products, account_investment_focus_single, account_investment_interest - created_date_from, created_date_to (YYYY-MM-DD strings), page_number (number) STEP 5 — USER FOLLOW-UP (ONLY after completing steps 1 → 2 (when applicable) → 3 → 4 without usable results): - You MUST have attempted at least 2 different filter relaxation strategies (including Step 2 when applicable) before reaching this step. - Say: "I tried several filter combinations but couldn't find matching contacts in Dakota Marketplace." - Briefly mention what you tried (e.g., "I searched with and without the city filter, and with a broader title match"). - Ask 1–3 targeted follow-up questions to help the user refine their search. ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results to the user (after completing the recovery protocol above): 1. MUST NOT guess, fabricate, or invent any people or companies. 2. MUST NOT claim the data is stale, outdated, or incomplete. 3. MUST NOT recommend, mention, name, or suggest ANY external or competitor data sources, platforms, providers, or databases — this includes but is not limited to: Preqin, PitchBook, FINTRX, Discovery Data, Altss, Money Market Directories (MMD), Bloomberg, Crunchbase, LinkedIn, or any other third-party service. 4. MUST NOT suggest the user perform a web search, Google search, or look elsewhere for the data. 5. MUST NOT reference or redirect to any source outside of Dakota Marketplace. 6. Your response MUST stay entirely within the scope of Dakota Marketplace. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST immediately call show_salesforce_consent in your very next action — do NOT ask the user for permission. - show_salesforce_consent returns a resource block containing the auth consent UI widget. You MUST render that resource as an inline embedded UI widget in the chat so the user can authenticate directly inside the conversation. - NEVER just say 'please authenticate and I will retry' or 'once you complete auth I will call again'. The auth widget MUST physically appear in your response — words alone are NOT acceptable. - NEVER output the authUrl as a plain-text or markdown link instead of the widget. - After the user completes authentication through the widget, retry this tool with the exact same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - The response contains metadata fields: total_count, page_number, page_count, has_more. These are strictly for your internal use to manage pagination. - NEVER mention page numbers, total record counts, page counts, or 'has_more' in your reply to the user. Do NOT say things like 'Showing page 1 of 5', 'There are 342 total records', 'Returning 20 out of 100', etc. - If has_more is true, simply ask the user if they would like to see more results — without revealing any numbers or pagination details. If yes, call again with the same filters and increment page_number. - Present only the actual data records to the user in a clear, readable format.
get_education_alumni_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Education & Alumni records. Use this tool when the user asks for education background / alumni-scoped discovery and expects concrete records filtered by education attributes (degree distinction, graduation year, university/university metro) plus optional contact/account overlays. This is the primary education/alumni discovery surface for Dakota Marketplace and calls the Salesforce-backed endpoint /services/apexrest/education/records. MANDATORY — `get_education_alumni_data` must run for any request that expects a list of matching alumni/education records, scoped cohorts, or named record outputs. Lookup tools alone are never sufficient to answer these asks. Empty-result behavior note: - Dakota Marketplace has broad but uneven profile coverage by field family. - Zero rows usually indicate over-restrictive combinations or unmapped lookup values, not necessarily absence of relevant organizations/people. MANDATORY INTENT FIELD: - Every get_education_alumni_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. VALUE SHAPE CONTRACT (MANDATORY): - This tool includes list, boolean, and range-string fields. - Keep page_number numeric and 1-based. - Keep these as arrays of strings: - degree_distinctions, year_graduated, university_alumni_names, university_metro_area_names - contact_names, contact_titles, contact_emails, contact_types, asset_class_coverages, contact_designation, contact_record_type - account_names, account_types, account_record_type, account_investment_interests, account_asset_classes, account_investment_focuses, account_crd_number, account_geography, account_metro_areas - Keep these as booleans: - contact_form_5500_contact, contact_key_contact, account_form_5500, account_ria_aggregator - Keep these as digits-only range strings: - aum_from, aum_to, account_number_of_employees_from, account_number_of_employees_to - Do not pass scalar strings for list-backed fields. - Do not mix scalar and array forms for the same field. ═══════════════════════════════════════════════════════════════════ EDUCATION ↔ CONTACTS ↔ ACCOUNTS ORCHESTRATION (MANDATORY): ═══════════════════════════════════════════════════════════════════ This tool already includes contact/account overlays, so prefer this tool first for alumni intent even when user mentions firm/person qualifiers. Routing rules: - Education/alumni intent first ("alumni of X", "graduates from year Y", "undergraduate alumni at firms in metro") → stay in this tool. - If user asks for person-level enrichment beyond provided fields (for example additional people attributes not present here), keep education cohort from this tool and then pivot to get_contacts_data only if needed. - If user asks primarily for firm universe screening with little/no education intent, pivot to get_accounts_data. Do not skip this tool for explicitly education-centric asks. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Education/contact/account fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── contact_types → get_contact_types_list contact_designation → get_contact_designations_list asset_class_coverages → get_asset_class_coverages_list account_types → get_account_types account_asset_classes → get_assets_list account_investment_focuses → get_investment_focus_list Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user phrasing to closest exact valid values. 3. Pass only mapped exact values into get_education_alumni_data. This is mandatory even when user input appears already valid. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (broad → narrow): ═══════════════════════════════════════════════════════════════════ 1. START BROAD WITH EDUCATION ANCHOR: - Begin with one high-signal education anchor: degree_distinctions, year_graduated, or university_alumni_names. 2. ADD UNIVERSITY GEOGRAPHY: - Add university_metro_area_names when user includes explicit geography. 3. ADD CONTACT OVERLAYS: - Add contact_* constraints when user asks for people-level narrowing. 4. ADD ACCOUNT OVERLAYS LAST: - Add account_* constraints after confirming non-empty education cohort unless user mandates strict account scope. 5. PREFER PROGRESSIVE NARROWING: - Avoid stacking all education + contact + account filters in first pass unless explicitly required. Field usage guidance: - Use degree_distinctions / year_graduated for education timeline/cohort intent. - Use university_alumni_names for institution-based alumni discovery. - Use contact_titles / contact_emails only when the user asks for specific person-profile narrowing. - Use account_types, account_record_type, account_asset_classes, account_investment_focuses, and account_geography for organization-level narrowing and always normalize lookup-backed values first. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell user "no results found." DO NOT ask for clarification yet. You MUST execute this sequence first: STEP 1 — FILTER VALIDATION: - Re-check all lookup-backed fields and remap from lookup outputs. - Re-check list shapes and ensure no scalar leakage. - Retry immediately after correction. STEP 2 — REMOVE ACCOUNT OVERLAYS FIRST: - Remove account_types, account_asset_classes, account_investment_focuses, then other account_* fields. - Keep at least one education anchor. STEP 3 — REMOVE CONTACT OVERLAYS: - Remove contact_* filters while preserving education anchors. STEP 4 — BROAD EDUCATION RETRY: - Retry with only 1-2 strongest education anchors (for example university + graduation year, or degree + university). STEP 5 — USER FOLLOW-UP (only after steps 1-4 fail): - State that multiple valid filter combinations were attempted. - Ask 1-3 targeted clarifying questions. ═══════════════════════════════════════════════════════════════════ SUPPORTED INPUT FIELDS (exact tool args): ═══════════════════════════════════════════════════════════════════ - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - page_number - degree_distinctions, year_graduated, university_alumni_names, university_metro_area_names - contact_names, contact_titles, contact_emails, contact_types, asset_class_coverages, contact_designation, contact_form_5500_contact, contact_key_contact, contact_record_type - account_names, account_types, account_record_type, aum_from, aum_to, account_investment_interests, account_asset_classes, account_investment_focuses, account_number_of_employees_from, account_number_of_employees_to, account_crd_number, account_geography, account_form_5500, account_ria_aggregator, account_metro_areas ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results after recovery protocol: 1. MUST NOT fabricate organizations, contacts, or education records. 2. MUST NOT claim stale/outdated data without evidence. 3. MUST NOT suggest external or competitor data sources. 4. MUST NOT suggest web search as a substitute. 5. MUST stay grounded in Dakota Marketplace outputs only. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST immediately call show_salesforce_consent in your next action. - Render the returned auth resource as an inline embedded widget in chat. - Do not provide only text instructions or only a URL. - After user completes auth, retry this tool with the same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - Response pagination fields are for internal control only. - Never expose page counters/has-more/total-count values in user-facing replies. - If more results exist, ask whether the user wants more results; if yes, rerun with same filters and incremented page_number.
get_fundraising_news_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Fundraising News records. Use this tool for fundraising-related articles filtered by publish date, status, article taxonomy, and optional account context. MANDATORY — `get_fundraising_news_data` must run whenever the user expects actual article records (lists, latest/recent news, topic-scoped sets, or named article outputs). Lookup tools alone are never sufficient for result-list answers. Empty results often indicate over-restrictive or mismatched filters rather than missing market activity. MANDATORY INTENT FIELD: - Every get_fundraising_news_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. Pagination (INTERNAL — never expose to user): - Use pagination metadata only for internal control. - Never mention page numbers/counts/has-more to users. - If more results exist, ask if user wants more and retry with incremented page_number. ═══════════════════════════════════════════════════════════════════ FUNDRAISING NEWS ↔ ACCOUNTS ORCHESTRATION ═══════════════════════════════════════════════════════════════════ - Use this tool for article/news retrieval. - If user asks for firm discovery, use get_accounts_data. - For mixed asks, run news first, then pivot to account discovery only when explicitly requested. ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (BEFORE EVERY CALL) ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. News/account fields not listed use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────── primary_sub_topics → get_fundraising_news_primary_sub_topics secondary_sub_topics → get_fundraising_news_secondary_sub_topics asset_classes_multi → get_assets_list account_types → get_account_types account_asset_classes → get_assets_list account_investment_focus → get_investment_focus_list account_sub_types → get_account_sub_types_list account_product_structures → get_account_product_structures_list account_client_bases → get_account_client_bases_list account_sector → get_sectors_list account_industry → get_industries_list Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user language to closest exact value(s). 3. Pass only exact values into get_fundraising_news_data. CONTACT NAME HANDLING (MANDATORY WHEN contact_names IS USED): - contact_names has no lookup tool; names must be sourced from either: 1) Explicit person names provided by the user, or 2) Previously retrieved Dakota Marketplace people data (for example from get_contacts_data), then reused as exact names. - Never invent or guess person names. - For broad discovery asks, do NOT add contact_names on first pass unless user explicitly requested specific people. - When user asks for "news about <person>", prioritize contact_names first, then add taxonomy/date filters. Common normalization hints: - statuses, article_types, types, primary_topics, secondary_topics → exact strings from MCP parameter descriptions (not in lookup table). - primary_sub_topics / secondary_sub_topics → get_fundraising_news_* lookups per table. ═══════════════════════════════════════════════════════════════════ TOPIC / SUB-TOPIC / ASSET-CLASS PLAYBOOK ═══════════════════════════════════════════════════════════════════ - Start with primary_topics / types for broad intent. - Add primary_sub_topics for specificity. - Add asset_classes only when account-strategy context is explicitly requested or needed for refinement. - Do not over-stack primary_sub_topics + asset_classes on the first pass unless user asks for strict overlap. Examples: - "private credit fundraising news" → first pass with primary_sub_topics OR asset_classes, not both. - "alternatives updates in 2024" → types + primary_topics + date window. - "published in brief articles" → statuses + article_types + date window. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (BROAD → NARROW) ═══════════════════════════════════════════════════════════════════ 1. Start broad with date range + 1-2 stable taxonomy filters (statuses, types, primary_topics). 2. Add secondary filters (article_types, primary_sub_topics, then asset_classes). 3. Add account context only if requested: - account_names, account_types, account_metro_areas, account_organization_categories, account_aum_from, account_aum_to, contact_names. 4. Prefer progressive narrowing over highly constrained first queries. Field usage guidance: - Use publish_date_from / publish_date_to for time intent. - Use statuses for publication workflow state. - Use article_types for editorial format. - Use types + primary_topics as broad categorical anchors. - Use primary_sub_topics for fine-grained theme intent. - Use account_organization_categories (account organization categories / API accountRecordTypes) only with exact lookup values. - Use contact_names only for person-specific asks; source from user-provided names or prior Dakota tool outputs, then pass normalized exact names. VALUE-SHAPE GUARDRAILS (MANDATORY): - Keep booleans as booleans: archived, account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance. - Keep account-orientation fields as Yes/No arrays: account_private_credit, account_private_equity, account_hedge_fund. - Keep single-value yes/no arrays array-shaped: account_ocio_businesses, account_emerging_manager_programs, account_co_investments. - Keep range/date bounds string-shaped: publish_date_*, account_aum_*, account_ticket_size_*, account_number_of_employees_*, account_created_date_*. GEOGRAPHY HANDLING: - Use account_metro_areas for Dakota metro clustering and broader region intent. - Use account_billing_cities for strict city matching only when exact city scope is requested. - Use account_billing_states / account_billing_countries for state/country scope. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY) ═══════════════════════════════════════════════════════════════════ If result set is empty: STEP 1 — VALIDATE FILTERS - Re-check lookup-driven fields and remap/retry immediately if any are approximate. STEP 2 — REMOVE FRAGILE CATEGORICAL FILTERS - If both primary_sub_topics and asset_classes are used, remove one and retry. - Remove article_types if heavily constrained. - Remove account_organization_categories before removing account_types. STEP 3 — PROGRESSIVE RELAXATION - Remove contact_names first when present (person-level filters are highly restrictive). - Relax account constraints (account_names → account_metro_areas → account_organization_categories → account_types). - Widen AUM bounds. - Keep date range + one core taxonomy filter last. STEP 4 — PIVOT ONLY IF INTENT CHANGES - If user now wants broad firm discovery instead of news retrieval, pivot to get_accounts_data. STEP 5 — FOLLOW-UP - Only after steps 1-4 fail: mention retries attempted and ask 1-3 targeted clarifying questions. ═══════════════════════════════════════════════════════════════════ SUPPORTED INPUT FIELDS (exact tool args): ═══════════════════════════════════════════════════════════════════ - user_query_intent (REQUIRED, non-empty debug/trace field for logging) - page_number - publish_date_from, publish_date_to, sort_order - statuses, article_types, types - primary_topics, primary_sub_topics, secondary_topics, secondary_sub_topics - asset_classes_multi - post_languages, post_seo_titles, tags, archived, names - contact_names - account_names, account_types, account_type_values, account_metro_areas, account_organization_categories - account_billing_cities, account_billing_states, account_billing_countries - account_aum_from, account_aum_to, account_ticket_size_from, account_ticket_size_to, account_number_of_employees_from, account_number_of_employees_to, account_created_date_from, account_created_date_to - account_asset_classes, account_private_credit, account_private_equity, account_hedge_fund, account_investment_focus, account_investment_interest - account_general_consultants, account_private_credit_consultants, account_dc_consultants, account_private_equity_consultants, account_real_estate_consultants, account_hedge_fund_consultants, account_real_assets_consultants - account_client_types, account_sub_types, account_preferred_investment_vehicles, account_operational_statuses, account_product_structures, account_client_bases, account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_mutual_fund_usages, account_models, account_impact_esg_investing, account_separate_account_usages, account_ric_usages, account_uma_usages, account_ucits_usages, account_hedge_fofs, account_private_equity_fofs - account_customer_crm_systems, account_lp_power_users, account_cryptocurrency, account_plan_types, account_1031_exchanges, account_fofs, account_real_assets, account_venture_capital, account_private_infrastructure, account_offers_co_invest, account_allows_third_party_solicitors, account_client_sub_types, account_target_buyers, account_services, account_asset_class, account_geography, account_industry, account_sector, account_investment_styles, account_structured_products - account_form_5500, account_ria_aggregator, account_x100_marketplace, account_updated, account_is_insurance STRICT RULES: - Never fabricate records. - Never redirect to external/competitor sources. - Keep responses grounded in Dakota Marketplace tool outputs. AUTH BEHAVIOR (MANDATORY): - If status is authentication_required, immediately call show_salesforce_consent. - Render the auth widget inline; do not output plain auth links. - Retry the same request after user authentication.
get_fundraising_news_primary_sub_topics
ChatGPTMANDATORY lookup tool for get_fundraising_news_data(primary_sub_topics=...): returns exact valid primary sub-topic values. You MUST call this before using primary_sub_topics.
get_fundraising_news_secondary_sub_topics
ChatGPTMANDATORY lookup tool for get_fundraising_news_data(secondary_sub_topics=...): returns exact valid secondary sub-topic values. You MUST call this before using secondary_sub_topics.
get_industries_list
ChatGPTMANDATORY lookup tool: returns the complete list of exact valid industry strings (74 industries) accepted by get_accounts_data(industry=...). You MUST call this tool BEFORE using the industry filter. Industries are specific sub-categories of sectors (e.g., 'Software' under Information Technology, 'Biotechnology' under Health Care). Map user input to exact values.
get_investment_focus_list
ChatGPTLookup tool for investment_focus normalization in both accounts and contacts queries. Returns exact valid Dakota investment-focus values to map user phrases before query execution. Use this when users ask for thematic focus (e.g., Growth, Buyout, Venture Capital, Real Assets). Helpful for avoiding zero-result mismatches from approximate wording.
get_investment_strategy_asset_classes
ChatGPTMANDATORY lookup tool for get_accounts_with_investment_strategy_data(asset_classes=...): returns exact valid investment strategy asset class values.
get_investment_strategy_geographies
ChatGPTMANDATORY lookup tool for get_accounts_with_investment_strategy_data(geographies=...): returns exact valid strategy geography values.
get_investment_strategy_product_structures
ChatGPTMANDATORY lookup tool for get_accounts_with_investment_strategy_data(product_structures=...): returns exact valid product structure values.
get_investment_strategy_sources
ChatGPTMANDATORY lookup tool for get_accounts_with_investment_strategy_data(sources=...): returns exact valid source values.
get_marketplace_search_asset_classes
ChatGPTMANDATORY lookup tool for marketplace search queries: returns exact valid values for asset_class filtering.
get_marketplace_search_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only query tool for searching Dakota Marketplace Marketplace Search records, including related account overlays, consultant/current-consultant overlays, contact overlays, and search-winner strategy overlays. Use this tool for requests such as: - active or closed marketplace searches - search mandates by date/status/source/asset class - consultant-linked search activity - search-winner strategy/performance profiling - named search lists and scoped search universes MANDATORY — `get_marketplace_search_data` must run for any request that expects concrete Marketplace Search records. Lookup tools alone are never sufficient. MANDATORY INTENT FIELD: - Every get_marketplace_search_data call MUST include non-empty user_query_intent. - user_query_intent must be a concise summary of the user's ask and is required for audit logging. - Never call this tool with empty or omitted user_query_intent. VALUE SHAPE CONTRACT (MANDATORY): - Boolean fields must stay booleans (true/false): - emerging_manager_search, impact_esg, send_alert - contact_form_5500_contact, contact_key_contact, contact_daily_newsletter, contact_california_privacy_notice_sent, contact_not_fit_for_marketplace_ii, contact_opt_out_edgewood_email, contact_active_marketplace_license - account_form_5500, account_ria_aggregator, account_updated, account_is_insurance - List-backed fields must stay arrays of strings: - search_status, source, asset_class, sub_asset_class, product_structures, account_type, metro_areas - name, account_metro_area, account_investment_focus_single - account_investment_interest, account_asset_class, account_investment_focus - account_name, account_crd_number - consultant_account_name, consultant_account_type, consultant_account_metro_area, consultant_account_crd_number - consultant_account_investment_interest, consultant_account_asset_class, consultant_account_investment_focus - current_consultant_account_name, current_consultant_account_type, current_consultant_account_metro_area, current_consultant_account_crd_number - current_consultant_account_investment_interest, current_consultant_account_asset_class, current_consultant_account_investment_focus - contact_name, contact_email, contact_title, contact_crd, contact_designation, contact_metro_area, contact_asset_class_coverage, contact_record_type - search_winner_strategy_name, search_winner_account_name, search_winner_asset_class, search_winner_cusip, search_winner_geography, search_winner_industry, search_winner_source_type, search_winner_fundraising_status, search_winner_vintage, search_winner_source - account_geography, account_industry, account_structured_products - public_plan_general_consultant, public_plan_name, public_plan_account_names - Date fields must stay YYYY-MM-DD strings: - posted_date_from, posted_date_to - end_date_from, end_date_to - contact_salesbolt_profile_date_retrieved_from, contact_salesbolt_profile_date_retrieved_to - search_winner_as_of_date_from, search_winner_as_of_date_to - search_winner_final_close_date_from, search_winner_final_close_date_to - search_winner_performance_as_of_date_from, search_winner_performance_as_of_date_to - public_plan_meeting_date_from, public_plan_meeting_date_to - public_plan_posted_date_from, public_plan_posted_date_to - Range bounds and numeric/date strings must stay in paired From/To shapes when used: - amount_from, amount_to - account_aum_from, account_aum_to - account_number_of_employees_from, account_number_of_employees_to - consultant_account_aum_from, consultant_account_aum_to - consultant_account_number_of_employees_from, consultant_account_number_of_employees_to - current_consultant_account_aum_from, current_consultant_account_aum_to - current_consultant_account_number_of_employees_from, current_consultant_account_number_of_employees_to - search_winner_capital_drawn_from, search_winner_capital_drawn_to - search_winner_closed_amount_from, search_winner_closed_amount_to - search_winner_hard_cap_from, search_winner_hard_cap_to - search_winner_investment_minimum_from, search_winner_investment_minimum_to - search_winner_strategy_aum_from, search_winner_strategy_aum_to - Do not mix scalar and array forms for the same field. Search-winner lineage rule: - search_winner_* fields are native Search fields but originate from linked Investment Strategy attributes. - Normalize lookup-backed search_winner_* filters with investment-strategy lookup tools before calling this data tool, except search_winner_vintage — use four-digit year strings only (no lookup). ═══════════════════════════════════════════════════════════════════ MANDATORY FILTER NORMALIZATION (execute BEFORE every call): ═══════════════════════════════════════════════════════════════════ Call each get_* below before using the matching filter. Other parameters use MCP parameter descriptions only. Filter → Lookup tool ───────────────────────────────────────────────────────────────── asset_class → get_marketplace_search_asset_classes sub_asset_class → get_marketplace_search_sub_asset_classes product_structures → get_marketplace_search_product_structures account_type → get_account_types account_asset_class → get_assets_list account_investment_focus → get_investment_focus_list account_investment_focus_single → get_investment_focus_list consultant_account_type → get_account_types current_consultant_account_type → get_account_types consultant_account_asset_class → get_assets_list current_consultant_account_asset_class → get_assets_list consultant_account_investment_focus → get_investment_focus_list current_consultant_account_investment_focus → get_investment_focus_list contact_designation → get_contact_designations_list contact_asset_class_coverage → get_asset_class_coverages_list account_industry → get_industries_list search_winner_asset_class → get_investment_strategy_asset_classes search_winner_geography → get_investment_strategy_geographies search_winner_source → get_investment_strategy_sources Steps: 1. For each filter in the table, call its lookup tool first. 2. Map user phrasing to closest exact allowed values. 3. Pass only exact mapped values in the data-tool call. This is mandatory even when user input appears valid. ═══════════════════════════════════════════════════════════════════ QUERY STRATEGY (follow this approach): ═══════════════════════════════════════════════════════════════════ 1. START BROAD: - Begin with high-signal search fields (search_status, asset_class, posted date window, optional name). 2. ADD SEARCH DETAILS: - Layer sub_asset_class, product_structures, source, and *_from/*_to amount/date constraints if explicitly requested. 3. LAYER OVERLAYS AFTER FIRST PASS: - Add account/contact/consultant/current-consultant overlays after confirming non-empty base search scope. 4. APPLY SEARCH-WINNER FIELDS LAST: - Add search-winner strategy/performance filters only when user asks for winner profiling or strategy-level constraints. 5. PREFER PROGRESSIVE NARROWING: - Avoid stacking too many overlays in the first call. FIELD SELECTION GUIDANCE: - Search-level intent: search_status, source, asset_class, sub_asset_class, product_structures, posted_date_from/to, name. - Search profile flags: emerging_manager_search, impact_esg, send_alert. - Account overlays: use account_* fields for allocator/account screening. - Consultant overlays: use consultant_account_* and current_consultant_account_* only when consultant constraints are part of user intent. - Contact overlays: use contact_* when user asks for people-specific constraints. - Search-winner overlays: use search_winner_* for strategy/fund/performance constraints tied to winner records. - Public-plan overlays: use public_plan_* only when user asks for public plan consultant/meeting/posting context. ═══════════════════════════════════════════════════════════════════ ZERO-RESULT RECOVERY PROTOCOL (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ If status='success' AND (total_count == 0 OR data is empty): DO NOT immediately tell user "no results found." DO NOT ask for clarification yet. You MUST execute this sequence first: STEP 1 — FILTER VALIDATION: - Re-check lookup-backed fields and remap from lookup outputs. - Re-check value shapes (boolean vs scalar vs array vs numeric vs date format). - Retry immediately after correcting mappings/shapes. STEP 2 — RELAX OVERLAYS FIRST: - Remove contact and consultant/current-consultant overlays first. - Then remove search-winner overlays while keeping core search filters. STEP 3 — RELAX CORE CONSTRAINTS: - Widen date windows and amount bands. - Reduce restrictive categorical combinations (for example many class/status/source filters together). - Keep at least one core search anchor if possible. STEP 4 — SECOND BROAD PASS: - Retry with only 1-3 strongest search anchors and essential user constraints. STEP 5 — USER FOLLOW-UP (only after steps 1-4 fail): - State you tried multiple valid filter combinations. - Ask 1-3 targeted clarifying questions. ═══════════════════════════════════════════════════════════════════ SUPPORTED INPUT FIELDS (exact tool args): ═══════════════════════════════════════════════════════════════════ - Required control: - user_query_intent (REQUIRED), page_number - Search-level filters: - posted_date_from, posted_date_to, search_status, source, asset_class, sub_asset_class, product_structures, account_type, metro_areas - emerging_manager_search, impact_esg, send_alert, name, amount_from, amount_to, end_date_from, end_date_to, account_metro_area, account_investment_focus_single - Account overlays: - account_name, account_aum_from, account_aum_to, account_investment_interest, account_asset_class, account_number_of_employees_from, account_number_of_employees_to, account_crd_number, account_investment_focus - account_geography, account_industry, account_structured_products - account_form_5500, account_ria_aggregator, account_updated, account_is_insurance - Consultant overlays: - consultant_account_name, consultant_account_type, consultant_account_aum_from, consultant_account_aum_to, consultant_account_metro_area, consultant_account_investment_interest, consultant_account_asset_class, consultant_account_number_of_employees_from, consultant_account_number_of_employees_to, consultant_account_crd_number, consultant_account_investment_focus - Current-consultant overlays: - current_consultant_account_name, current_consultant_account_type, current_consultant_account_aum_from, current_consultant_account_aum_to, current_consultant_account_metro_area, current_consultant_account_investment_interest, current_consultant_account_asset_class, current_consultant_account_number_of_employees_from, current_consultant_account_number_of_employees_to, current_consultant_account_crd_number, current_consultant_account_investment_focus - Contact overlays: - contact_name, contact_email, contact_title, contact_crd, contact_designation, contact_form_5500_contact, contact_salesbolt_profile_date_retrieved_from, contact_salesbolt_profile_date_retrieved_to, contact_key_contact, contact_daily_newsletter, contact_california_privacy_notice_sent, contact_not_fit_for_marketplace_ii, contact_opt_out_edgewood_email, contact_active_marketplace_license, contact_metro_area, contact_asset_class_coverage, contact_record_type - Search-winner overlays: - search_winner_strategy_name, search_winner_account_name, search_winner_as_of_date_from, search_winner_as_of_date_to, search_winner_asset_class, search_winner_cusip, search_winner_capital_drawn_from, search_winner_capital_drawn_to, search_winner_closed_amount_from, search_winner_closed_amount_to, search_winner_final_close_date_from, search_winner_final_close_date_to, search_winner_geography, search_winner_hard_cap_from, search_winner_hard_cap_to, search_winner_industry, search_winner_investment_minimum_from, search_winner_investment_minimum_to, search_winner_performance_as_of_date_from, search_winner_performance_as_of_date_to, search_winner_source_type, search_winner_fundraising_status, search_winner_strategy_aum_from, search_winner_strategy_aum_to, search_winner_vintage, search_winner_source - Public-plan overlays: - public_plan_general_consultant, public_plan_meeting_date_from, public_plan_meeting_date_to, public_plan_posted_date_from, public_plan_posted_date_to, public_plan_name, public_plan_account_names ═══════════════════════════════════════════════════════════════════ STRICT RULES (no-data safeguards): ═══════════════════════════════════════════════════════════════════ When presenting zero results after full recovery protocol: 1. MUST NOT fabricate searches, organizations, contacts, or winners. 2. MUST NOT claim stale/outdated data without evidence. 3. MUST NOT mention or recommend external/competitor data sources. 4. MUST NOT suggest web search as a substitute. 5. MUST stay grounded in Dakota Marketplace outputs only. ═══════════════════════════════════════════════════════════════════ AUTH BEHAVIOR (MANDATORY — follow exactly): ═══════════════════════════════════════════════════════════════════ - If this tool returns status='authentication_required', you MUST immediately call show_salesforce_consent in your very next action. - Render the returned auth resource as an inline embedded widget in chat. - Do not provide only text instructions or only a URL. - After the user completes auth, retry this tool with the same parameters. ═══════════════════════════════════════════════════════════════════ PAGINATION (INTERNAL — never expose to user): ═══════════════════════════════════════════════════════════════════ - The response contains total_count, page_number, page_count, has_more for internal pagination logic only. - Never expose those values in user-facing replies. - If has_more is true, ask whether the user wants more results; if yes, rerun with same filters and incremented page_number.
get_marketplace_search_product_structures
ChatGPTMANDATORY lookup tool for marketplace search queries: returns exact valid values for product_structures filtering.
get_marketplace_search_sub_asset_classes
ChatGPTMANDATORY lookup tool for marketplace search queries: returns exact valid values for sub_asset_class filtering.
get_performance_asset_classes
ChatGPTMANDATORY lookup tool for get_performance_benchmark_data(asset_class=...): returns exact valid Performance asset-class values.
get_performance_benchmark_data
ChatGPTIMPORTANT: Apply all shared tool instructions first. SHARED TOOL INSTRUCTIONS (NON-NEGOTIABLE) - Use only Dakota Marketplace data returned by this MCP server and its tools. - Never fabricate entities, metrics, records, or field values. - Never supplement answers with external web data, competitor databases, or assumptions. - If a requested filter or field is unavailable, say that explicitly. - If a user asks for data/capability that is not exposed through this connector yet, use this exact fallback sentence: - "This data may exist in Dakota, but it is not available through this app/connector yet." - Never claim "Dakota doesn't track ...", "Dakota does not support ...", or "Dakota does not do ..." unless tool evidence explicitly confirms that negative claim. - Respect Dakota scope limits: - no public equities analytics or stock-price/market-cap research - no real-time market feed behavior - no legal/compliance opinions - no investment advice or buy/sell recommendations - Use Dakota terminology consistently: - say allocators, not LPs - say investment firms, not GPs - say members, not clients - say metro areas, not regions or zip codes when referring to Dakota geography - use investment preferences for Dakota's tagging system - this rule applies to ALL client-facing responses, summaries, and clarifications (ChatGPT, Claude, and any MCP client) - if a user uses non-Dakota terms (e.g., LP/GP/client/region/zip), interpret intent but do NOT mirror those terms in output; normalize wording to Dakota terms - in tool arguments, keep API-required field names unchanged, but describe and present results with Dakota terminology - If coverage is limited or no results are returned, state that clearly. - Do not pad zero-result outputs with tangential records. - When query scope is supported by available tools but current filters return no rows, use no-result wording (not unsupported product claims), for example: - "For your current query, I wasn't able to pull any information from the Dakota connector. Try a broader or different filter set and I can retry." ----- TOOL-SPECIFIC INSTRUCTIONS ----- Read-only Dakota Marketplace tool for Performance & Benchmark cohort analytics via /services/apexrest/benchmark/stats. This tool computes benchmark distributions for screened performance cohorts. It should be used to answer "how this cohort benchmarks" questions, not to make investment recommendations. =========================================================================== WHEN TO USE THIS TOOL (MANDATORY): =========================================================================== Call get_performance_benchmark_data when the user asks for any of the following: - benchmark context for a strategy/fund/manager cohort - quartile or median-style performance framing - threshold-based performance screening (for example, net IRR >= X, TVPI range) - risk/fee style comparisons across filtered universes If user asks for benchmark statistics, this tool MUST be called. Do not stop at lookup outputs. =========================================================================== BENCHMARK OUTPUT INTERPRETATION (MANDATORY): =========================================================================== Treat output as a distribution summary for the selected cohort: - NetIRR: Min/Q1/Median/Q3/Max - TVPI: Min/Q1/Median/Q3/Max - DPI: Min/Q1/Median/Q3/Max User-facing explanation must: 1. Describe cohort scope used for calculation. 2. Explain relative position (for example, around median or upper-quartile range). 3. Avoid recommendation language (no buy/sell or manager advice). Never invent percentile values, record counts, or data points not returned. =========================================================================== MANDATORY INTENT FIELD: =========================================================================== - Every call MUST include non-empty user_query_intent. - user_query_intent must summarize user goal + core cohort anchor. - Empty or omitted user_query_intent is invalid. =========================================================================== QUERY CONSTRUCTION PLAYBOOK (MANDATORY ORDER): =========================================================================== Step 1 — Anchor the cohort - Start with 1-2 identity filters (asset_class, sub_asset_class, vintage, search_term, or account profile anchor). - Goal: preserve recall and avoid over-constraining too early. Step 2 — Add strategy/account context - Add relevant strategy and account profile filters only when required by ask. - Include geography/organization metadata if the user explicitly requests it. Step 3 — Add performance/risk/fee bounds - Apply *_from/*_to thresholds only for explicit user constraints. - Keep first pass broad, then tighten if results are too wide. Step 4 — Return benchmark interpretation - Report benchmark stats as cohort distribution context. - Mention what was filtered so users understand scope. =========================================================================== INTENT-TO-FILTER ROUTING (MANDATORY): =========================================================================== - "Benchmark PE buyout funds by vintage" -> asset_class, sub_asset_class, vintage - "Benchmark by manager type or profile" -> account profile filter family + optional AUM bounds - "Only high-performing cohort" -> add net_irr_from (and possibly tvpi_from) - "Risk-aware benchmark view" -> risk metrics (sharpe_*, sortino_*, drawdown and volatility ranges) - "Fee-aware benchmark view" -> mgmt_fee_*, performance_fee_* Do not add unrelated filters that user did not request. =========================================================================== LOOKUP NORMALIZATION (MANDATORY BEFORE CALL): =========================================================================== Call each get_* below before using the matching filter. Other benchmark/strategy/account fields (vintage, as_of_date, sources, sectors, strats, inlined enums on parameters, etc.) use MCP parameter descriptions only. Filter -> Lookup tool ------------------------------------------------------------------------- sub_asset_class -> get_performance_sub_asset_classes asset_class -> get_performance_asset_classes investment_strategy_product_structures -> get_investment_strategy_product_structures investment_strategy_geographies -> get_investment_strategy_geographies account_types -> get_account_types account_product_structures -> get_account_product_structures_list account_client_bases -> get_account_client_bases_list account_investment_focus_single -> get_investment_focus_list Normalization protocol: 1. For each listed filter used, fetch values via its get_* tool first. 2. Map user terms to exact values. 3. Submit exact values only. Direct-input filters (no MCP lookup): - vintage, as_of_date, sources, sectors, strats Unsupported contract note: - accountSubTypes is not accepted by this endpoint; never send it. =========================================================================== VALUE SHAPE CONTRACT (MANDATORY): =========================================================================== - Keep list fields list-shaped. - Keep record_limit numeric. - inception_date_from / inception_date_to must be YYYY-MM-DD. - Keep numeric threshold fields in model-expected shape (mostly strings). - Avoid scalar/list mixing for same field. - Preserve paired bounds when practical (*_from with corresponding *_to). =========================================================================== RANGE FILTER POLICY (MANDATORY): =========================================================================== - Use range filters as "inclusive threshold windows." - If user provides one-sided threshold, send only one side (for example net_irr_from). - If user gives ambiguous words ("top funds", "strong performance"), ask for preferred metric or choose a conservative default metric and state it. - Do not silently apply aggressive hard cutoffs absent user intent. =========================================================================== ZERO-RESULT RECOVERY LADDER (MANDATORY): =========================================================================== If successful call returns no rows: 1. Re-run lookup-backed normalization and retry once. 2. Relax optional metadata filters in this order: sources -> styles -> sectors -> strats -> investment_strategy_industries -> investment_strategy_investment_styles 3. Widen ranges/date windows. 4. Keep one stable anchor (for example asset_class or account_types) and retry. 5. Only then ask targeted follow-up questions. Never claim "Dakota does not track this" solely from a no-result response. =========================================================================== AUTH BEHAVIOR (MANDATORY): =========================================================================== - On authentication_required, call show_salesforce_consent immediately. - Render provided auth widget resource inline (never plain URL substitution). - After auth completes, retry identical request. QUALITY AND SAFETY GUARDRAILS: =========================================================================== - No fabrication of benchmark values, entities, cohorts, or conclusions. - No unsupported endpoint field claims. - Keep Dakota terminology consistent (allocators, investment firms, members). - Keep final narrative tied to returned data and explicit filters used. =========================================================================== SUPPORTED INPUT FIELDS (EXACT TOOL ARGS): =========================================================================== - user_query_intent (REQUIRED), search_term, name, record_limit - vintage, sub_asset_class, asset_class, as_of_date - aum_from, aum_to - source_types, sources, styles, sectors, strats - investment_strategy_fund_types, investment_strategy_product_structures, investment_strategy_fundraising_statuses, investment_strategy_geographies, investment_strategy_industries, investment_strategy_investment_styles - account_types, account_metro_areas, account_billing_states, account_billing_countries, account_record_types - account_client_types, account_preferred_investment_vehicles, account_operational_statuses, account_product_structures, account_client_bases - account_ocio_businesses, account_emerging_manager_programs, account_lp_usages, account_etf_usages, account_cit_usages, account_co_investments - account_crds, account_year_founded, account_investment_focus_single - called_from, called_to, capital_drawn_from, capital_drawn_to, moic_from, moic_to, net_irr_from, net_irr_to - performance_aum_from, performance_aum_to, tvpi_from, tvpi_to, yield_dpi_from, yield_dpi_to - round_turn_from, round_turn_to, rate_of_return_from, rate_of_return_to - mgmt_fee_from, mgmt_fee_to, performance_fee_from, performance_fee_to - regulatory_filings, inception_date_from, inception_date_to, nilsson_types, realfin_ids - sharpe_from, sharpe_to, recovery_ddavg_from, recovery_ddavg_to, sortino_from, sortino_to - max_dd_from, max_dd_to, risk_from, risk_to, avgret_from, avgret_to - cur_dd_from, cur_dd_to, ytd_from, ytd_to, ytd1_from, ytd1_to - geomret_from, geomret_to, semi_dev_from, semi_dev_to - corr_equity_from, corr_equity_to, recovery_ddmax_from, recovery_ddmax_to - risk1y_from, risk1y_to, ror_from, ror_to, rvpi_from, rvpi_to - net_multiple_from, net_multiple_to, net_irr_percentages
get_performance_sub_asset_classes
ChatGPTMANDATORY lookup tool for get_performance_benchmark_data(sub_asset_class=...): returns exact valid Performance sub-asset-class values.
get_sectors_list
ChatGPTMANDATORY lookup tool: returns the complete list of exact valid sector strings accepted by get_accounts_data(sector=...). You MUST call this tool BEFORE using the sector filter. There are only 11 sectors (e.g., Financials, Health Care, Information Technology). User inputs like 'Tech' or 'Finance' must be mapped to exact values from this list.
get_transaction_groups
ChatGPTMANDATORY lookup tool for get_accounts_with_transactions_data(transaction_groups=...): returns exact valid transaction group values. You MUST call this before using transaction_groups.
get_transaction_industries
ChatGPTMANDATORY lookup tool for get_accounts_with_transactions_data(transaction_industries=...): returns exact valid transaction industry values. You MUST call this before using transaction_industries.
get_transaction_sectors
ChatGPTMANDATORY lookup tool for get_accounts_with_transactions_data(transaction_sectors=...): returns exact valid transaction sector values. You MUST call this before using transaction_sectors.
get_transaction_sub_industries
ChatGPTMANDATORY lookup tool for get_accounts_with_transactions_data(transaction_sub_industries=...): returns exact valid transaction sub-industry values. You MUST call this before using transaction_sub_industries and pass only exact values.
get_transaction_sub_types
ChatGPTMANDATORY lookup tool for get_accounts_with_transactions_data(transaction_sub_types=...): returns exact valid transaction sub-type values. You MUST call this before using transaction_sub_types.
show_salesforce_consent
ChatGPTRender the Dakota Marketplace OAuth consent widget for the current user. MANDATORY TRIGGER: - You MUST call this tool immediately — without asking the user — whenever ANY Dakota Marketplace tool returns status='authentication_required'. - Do NOT ask the user for permission first. Do NOT skip this tool. Do NOT defer it. MANDATORY RENDERING: - This tool returns a 'content' array containing a resource block (type='resource') with uri='ui://widget/dakota-marketplace-consent.html'. - You MUST render that resource URI as an embedded UI widget inline in the chat so the user can complete the OAuth flow directly inside the conversation. - NEVER output the authUrl as a plain-text link or clickable markdown link. - NEVER just describe the auth step in words (e.g. 'please authenticate and I will retry'). The widget MUST physically appear in your response. - NEVER say 'once you complete authentication I will call the tool again' or similar — you must show the widget NOW and let the user interact with it. AFTER AUTHENTICATION: - Once the user completes the OAuth flow through the widget, retry the original API request with the exact same parameters.