{"version":"v1","generated_at":"2026-08-30T07:53:12.121Z","catalog_revision":"f2fdb87d93ad","tools":[{"name":"agent_session","title":"Agent session","description":"Manage session/project continuity for durable/named external-agent work when the user explicitly asks. This is not people, company, job, or post search. Never call start in unattended, scheduled, headless, or background runs: call the requested domain tool without agent_session_id so it creates an implicit session, then carry the returned session/project ids.","scope":"search","annotations":{"title":"Agent session","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["start","bind","list","switch_project","status","close"],"description":"Session operation: start | bind | list | switch_project | status | close. Default: start."},"agent_name":{"type":"string","description":"For start: user-facing session name."},"agent_session_id":{"type":"string","description":"Stable session id returned by start/list; required except for start/list."},"project_id":{"type":"string","description":"Project id for switch_project or list filtering."},"client_name":{"type":"string","description":"For start: MCP client name when protocol metadata is unavailable."},"client_version":{"type":"string","description":"For start: MCP client version when protocol metadata is unavailable."},"external_thread_ref":{"type":"string","description":"For start: opaque client thread id."},"intent":{"type":"string","description":"For start: one-line session objective."},"expected_outcome":{"type":"string","description":"For start: one-line definition of a good result."},"state":{"type":"string","enum":["active","closed"],"description":"For list: active or closed sessions."},"archived":{"type":"boolean","description":"For list: true=archived only; false=active/unarchived only."},"include_archived":{"type":"boolean","description":"For list: include archived sessions. Default: false."},"search":{"type":"string","description":"For list: filter by session title, agent name, or client name."},"limit":{"type":"number","description":"For list: maximum rows (default 25, max 100)."},"offset":{"type":"number","description":"For list: pagination offset."}},"additionalProperties":false}},{"name":"search_capabilities","title":"Read search capabilities","description":"Read one search tool's complete typed-filter schema, plus authoring_contract when that tool defers authoring doctrine. Callable at any time, including before this session's first search; use it before authoring typed filters. Read-only and repeatable; it does not execute a search and never limits later corrective calls.","scope":"search","annotations":{"title":"Read search capabilities","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","additionalProperties":false,"properties":{"tool_name":{"type":"string","enum":["people_search","company_search","jobs_search","posts_search"],"description":"Search tool whose complete typed-filter schema to read."},"response_delivery":{"type":"string","enum":["text_compatible","structured_only"],"description":"structured_only omits the duplicate serialized schema from content[]. Default text_compatible; unsupported requests are downgraded."}},"required":["tool_name"]}},{"name":"people_search","title":"People search","description":"Returns person/profile rows for candidate, contact, and relationship-path retrieval. One bare result-producing people_search uses the full NL query, needed fields/evidence/output shaping, and top-level limit:N for N requested rows (max 25); omit limit only with no count. Bare returns rows directly, without preview/workflow scaffolding or count/format/workflow in query. A bare occupational title stays literal apart from spelling/abbreviation equivalents; adjacent title variants may broaden only within requested seniority, an explicit user-approved relaxation, or a specialized bounded contract. Typed calls use filters, not query; target_name is a literal candidate name and may accompany filters. Controls stay at root; network_filter_mode, keyword_match_mode, additional_context_keywords_core, and additional_context_keywords_supporting stay in filters.where, never directly under filters. Counts use preview:true, limit:0; omit row, sort, paging, and relationship controls. Compile the full requested eligibility before calling. Every user-listed hard alternative (A, B, or C; any acceptable signal) is a sibling arm of one filters.any_of; never select one arm as the mandatory gate or repeat an arm as a top-level hard filter. Author an exclusion only for the exact negative criterion the user supplied. Goals, positive examples, evidence gaps, row inspection, and subjective curation never invent job_titles.exclude or another exclude lane. Put row criteria in filters.where and related criteria in filters.<related plural>[] with relation, operator, and where or cohort_ref. relation_evidence_coverage is final; evidenced_rows:0 needs no follow-up. Describe execution problems in user words: never surface an internal warning code, layer name, or receipt field name (for example query_degraded) in an answer, ticket, or message. collect_qualifying_count is a server-authored exact-N continuation control: never set it on a new request, and preserve it only from required_next_call or next_page. Present returned membership without local reranking. After answer_ready:true supplies the requested count and core fields, that people cohort is terminal: render it. Do not restart the same cohort at offset 0, add exclusions, or tighten it from row inspection. Continue only for an exact required_next_call, a typed mapping defect, user-requested paging, or a distinct people cohort explicitly required by the original request. next_page preserves criteria and source cursor. Preserve hard criteria after a faithful zero. Before authoring typed filters beyond these basics, call search_capabilities with this tool_name for the complete authoring contract. Query-only accepts natural language; typed calls omit query. When condensing a request into query, preserve eligibility, preferences, and permissive universe wording; never invent a hard employer or industry gate.","scope":"search","annotations":{"title":"People search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://supercarl.ai/schemas/search-tools/people_search.mcp-wire","type":"object","description":"Use query, target_name, or typed filters; target_name may accompany filters without cohort_ref. Never combine query and filters. The server validates the contract.","additionalProperties":false,"required":[],"properties":{"answer_projection":{"type":"string","enum":["person.matches"]},"query":{"type":"string","minLength":1,"maxLength":2000,"description":"Full natural-language criteria. State each requested role or title once; do not add synonyms, spelling variants, or adjacent seniority. The service expands title families and returns the applied request."},"target_name":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Hard full or partial candidate name; combine with typed filters unless they use cohort_ref."},"preview":{"type":"boolean"},"include_title_scope_review":{"type":"boolean"},"collect_qualifying_count":{"type":"integer","minimum":1,"maximum":25},"include_user_ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1},"uniqueItems":true},"exclude_user_ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string","minLength":1},"uniqueItems":true},"limit":{"type":"integer","minimum":0,"maximum":25},"offset":{"type":"integer","minimum":0},"sort_by":{"type":"string","enum":["best_match","last_name","connected_date","followers_count","connections_count","years_experience_months","current_role_tenure_months","average_role_tenure_months","last_posted_at","company_size","company_revenue"]},"sort_order":{"type":"string","enum":["asc","desc"]},"fields":{"type":"array","items":{"type":"string","enum":["name","linkedin_url","instagram_url","instagram_username","instagram_link_state","instagram_connected_at","instagram_reachable","instagram_owner_follows","instagram_follows_owner","instagram_is_mutual","x_profile_url","x_username","x_link_state","x_connected_at","x_relationship_label","x_reachable","x_owner_follows","x_follows_owner","x_is_mutual","correspondence_count","has_previous_correspondence","gmail_outbound_message_count","gmail_inbound_message_count","last_corresponded_at","gmail_link_state","gmail_reachable","work_email","picture","headline","bio","current_title","current_company","location","current_role_started_at","current_role_tenure_months","role_change_evidence","years_experience_months","average_role_tenure_months","experiences","education","skills","languages","languages_detailed","connections_count","followers_count","recommendations_count","connection_degree"]},"minItems":1,"maxItems":10,"uniqueItems":true},"evidence_format":{"type":"string","enum":["none","reasons"]},"include_current_user":{"type":"boolean"},"diversify_by_company":{"type":"boolean"},"relationship_detail":{"type":"string","enum":["none","summary","intro_paths"]},"intro_path_limit":{"type":"integer","minimum":1,"maximum":20},"filters":{"type":"object","minProperties":1,"additionalProperties":true,"description":"Typed call; may be first or accompany target_name unless using cohort_ref. Omit query. Before unfamiliar filters, call search_capabilities with tool_name:\"people_search\" for the complete schema and authoring contract."},"agent_session_id":{"type":"string"}}}},{"name":"people_lookup_batch","title":"Batch LinkedIn people lookup","description":"Load or enrich a batch of already-known LinkedIn identities by profile URL or username. This is direct profile lookup, not candidate discovery, criteria search, identity certification, or replacement sourcing. Use people_search when the people are not already identified. Exact current-role fields trigger a force-fresh provider hydration unless profile_refresh:\"if_sparse\" is explicit. For large batches, use response_verbosity:\"compact\" or fields for an exact projection; non-empty batches cost max(1, completed rows / 100) credits.","scope":"search","annotations":{"title":"Batch LinkedIn people lookup","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"profiles":{"type":"array","minItems":1,"maxItems":250,"items":{"type":"object","properties":{"linkedin_profile_url":{"type":"string"},"linkedin_url":{"type":"string"},"linkedin_username":{"type":"string"}},"additionalProperties":false},"description":"Known LinkedIn profiles; each item needs a URL or username."},"delegate_user_id":{"type":"string"},"evidence_format":{"type":"string","enum":["none","text","json","both"],"description":"Evidence: none, text, json, or both."},"response_verbosity":{"type":"string","enum":["compact","minimal","detailed"],"description":"detailed, minimal, or compact rows."},"fields":{"type":"array","items":{"type":"string"},"description":"Exact presentation fields; missing values return null."},"profile_refresh":{"type":"string","enum":["if_sparse","force"],"description":"if_sparse or force provider hydration."},"select":{"type":"array","items":{"type":"string"},"description":"Extra evidence fields. Use experiences; full history belongs in people_search."},"evidence_text_mode":{"type":"string","enum":["base","full"]},"evidence_posts_limit":{"type":"number"},"relationship_detail":{"type":"string","enum":["none","summary","intro_paths"],"description":"none, summary, or intro_paths. Experience-intersection paths are possible, not confirmed mutuals; inspect returned status."},"intro_path_limit":{"type":"number"},"possible_intro_limit":{"type":"number"},"possible_intro_offset":{"type":"number"},"mutual_connection_limit":{"type":"number"},"mutual_connection_offset":{"type":"number"},"agent_session_id":{"type":"string"}},"required":["profiles"],"additionalProperties":false}},{"name":"company_search","title":"Company search (company rows only)","description":"Returns company/account rows for company answers and employer or account cohorts. Typed calls use filters, not query. Execution controls are top-level siblings of filters and are invalid inside it. Put row criteria in filters.where and related criteria in filters.<related plural>[] with relation, operator, and where or cohort_ref. relation_evidence_coverage is final; evidenced_rows:0 needs no follow-up. Present returned membership without local reranking. next_page preserves criteria and source cursor. answer_ready governs page continuation; the client decides whether to page or adjust filters. Preserve hard criteria after a faithful zero. Query-only accepts natural language; typed calls omit query.","scope":"search","annotations":{"title":"Company search (company rows only)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://supercarl.ai/schemas/search-tools/company_search.mcp-wire","type":"object","description":"Use query or typed filters, including on the first call. Never combine them. The server validates the contract.","additionalProperties":false,"required":[],"properties":{"answer_projection":{"type":"string","enum":["company.matches"]},"query":{"type":"string","minLength":1,"maxLength":2000,"description":"Criteria; with resolve_only, query must be only the bare company name, domain, or LinkedIn URL."},"limit":{"type":"integer","minimum":1,"maximum":100},"sort_by":{"type":"string","enum":["best_match","hotness","revenue","employee_count","active_jobs"]},"preview":{"type":"boolean"},"resolve_only":{"type":"boolean"},"filters":{"type":"object","minProperties":1,"additionalProperties":true,"description":"Typed call; may be first. Omit query. Before unfamiliar filters, call search_capabilities with tool_name:\"company_search\" for the complete schema and authoring contract."},"agent_session_id":{"type":"string"}}}},{"name":"company_search_batch","title":"Batch company resolution","description":"Batch-resolve company names, domains, or LinkedIn URLs. Cost max(1, rows/100) credits. people_search OR: filters.companies[].where.any_of; top-level any_of is cross-source. V2 preview:true,limit:0,runnable:false until search_ingress succeeds. any_experience=alumni. Partial: ask for identifiers; never search subset unless user accepts smaller scope. Skip people actions for company-only work.","scope":"search","annotations":{"title":"Batch company resolution","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"companies":{"type":"array","minItems":1,"maxItems":250,"description":"Companies to resolve, as name strings or identity objects.","items":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"name":{"type":"string","minLength":1},"domain":{"type":"string","minLength":1},"website":{"type":"string","minLength":1},"linkedin_url":{"type":"string","minLength":1}},"anyOf":[{"required":["name"]},{"required":["domain"]},{"required":["website"]},{"required":["linkedin_url"]}],"additionalProperties":false}]}},"people_search_scope":{"type":"string","enum":["current","any_experience"],"description":"Current employees (default) or any past/current experience."},"agent_session_id":{"type":"string"}},"required":["companies"],"additionalProperties":false}},{"name":"jobs_search","title":"Jobs search","description":"Returns job-posting/open-role rows; source and status evidence determine whether a role is currently active. Typed calls use filters, not query. Execution controls are top-level siblings of filters and are invalid inside it. Put row criteria in filters.where and related criteria in filters.<related plural>[] with relation, operator, and where or cohort_ref. relation_evidence_coverage is final; evidenced_rows:0 needs no follow-up. For a background/résumé-fit or sector-focus request, express sector/domain as posting evidence (evidence_terms with match_mode:\"posting_text\") and ranking.intent; a filters.companies clause is always a hard employer cohort, so use it only for employers the user named or selected. Present returned membership without local reranking. next_page preserves criteria and source cursor. answer_ready governs page continuation; the client decides whether to page or adjust filters. Preserve hard criteria after a faithful zero. Query-only accepts natural language; typed calls omit query.","scope":"search","annotations":{"title":"Jobs search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://supercarl.ai/schemas/search-tools/jobs_search.mcp-wire","type":"object","description":"Use query or typed filters, including on the first call. Never combine them. The server validates the contract.","additionalProperties":false,"required":[],"properties":{"answer_projection":{"type":"string","enum":["job.matches","person.warm_paths"]},"query":{"type":"string","minLength":1,"maxLength":2000,"description":"Full natural-language criteria; the service converts them to typed filters, runs the search, and returns the applied request."},"limit":{"type":"integer","minimum":1,"maximum":25},"ranking":{"type":"object","additionalProperties":false,"properties":{"intent":{"type":"string","enum":["balanced","warm_intro","experience_match","hot_company","level_up"]},"weights":{"type":"object","minProperties":1,"additionalProperties":false,"properties":{"role_fit":{"type":"number","minimum":0.4,"maximum":2.5},"domain_match":{"type":"number","minimum":0.4,"maximum":2.5},"company_quality":{"type":"number","minimum":0.4,"maximum":2.5},"warm_path_quality":{"type":"number","minimum":0.4,"maximum":2.5},"network_buzz":{"type":"number","minimum":0.4,"maximum":2.5},"level_up_fit":{"type":"number","minimum":0.4,"maximum":2.5},"freshness_status":{"type":"number","minimum":0.4,"maximum":2.5},"comp_location_fit":{"type":"number","minimum":0.4,"maximum":2.5},"user_preference_fit":{"type":"number","minimum":0.4,"maximum":2.5}}},"emphasis":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["role_fit","domain_match","company_quality","warm_path_quality","network_buzz","level_up_fit","freshness_status","comp_location_fit","user_preference_fit"]}}},"minProperties":1},"evidence_terms":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","minLength":1}},"match_mode":{"type":"string","const":"posting_text","enum":["posting_text"]},"filters":{"type":"object","minProperties":1,"additionalProperties":true,"description":"Typed call; may be first. Omit query. Before unfamiliar filters, call search_capabilities with tool_name:\"jobs_search\" for the complete schema and authoring contract."},"agent_session_id":{"type":"string"}}}},{"name":"posts_search","title":"Posts search","description":"Returns source post/activity rows with link, date, and author evidence when available. Typed calls use filters, not query. Execution controls are top-level siblings of filters and are invalid inside it. Put row criteria in filters.where and related criteria in filters.<related plural>[] with relation, operator, and where or cohort_ref. relation_evidence_coverage is final; evidenced_rows:0 needs no follow-up. Present returned membership without local reranking. next_page preserves criteria and source cursor. answer_ready governs page continuation; the client decides whether to page or adjust filters. Preserve hard criteria after a faithful zero. Query-only accepts natural language; typed calls omit query.","scope":"search","annotations":{"title":"Posts search","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://supercarl.ai/schemas/search-tools/posts_search.mcp-wire","type":"object","description":"Use query or typed filters, including on the first call. Never combine them. The server validates the contract.","additionalProperties":false,"required":[],"properties":{"answer_projection":{"type":"string","enum":["post.matches","person.authors","company.official_authors"]},"query":{"type":"string","minLength":1,"maxLength":2000,"description":"Full natural-language criteria; the service converts them to typed filters, runs the search, and returns the applied request."},"limit":{"type":"integer","minimum":1,"maximum":50},"offset":{"type":"integer","minimum":0},"sort_by":{"type":"string","enum":["relevance","recent","engagement","reactions","comments"]},"sort_order":{"type":"string","enum":["asc","desc"]},"evidence_terms":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","minLength":1}},"filters":{"type":"object","minProperties":1,"additionalProperties":true,"description":"Typed call; may be first. Omit query. Before unfamiliar filters, call search_capabilities with tool_name:\"posts_search\" for the complete schema and authoring contract."},"agent_session_id":{"type":"string"}}}},{"name":"communication_read","title":"Read communication status and history","description":"Read cached outreach capability, cached communication history, or queued/send delivery status without drafting, sending, cancelling, refreshing LinkedIn history, or enriching email. Modes: precheck, history, status. Use send_communication for fresh history, recipient resolution, drafts, live sends, or cancel.","scope":"communications","annotations":{"title":"Read communication status and history","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["precheck","history","status"],"description":"Required read: precheck, history, or status."},"delegate_user_id":{"type":"string"},"agent_session_id":{"type":"string"},"project_id":{"type":"string"},"project_target_id":{"type":"string"},"target_user_id":{"type":"string"},"linkedin_profile_url":{"type":"string"},"linkedin_username":{"type":"string"},"x_profile_url":{"type":"string"},"x_username":{"type":"string"},"instagram_profile_url":{"type":"string"},"instagram_username":{"type":"string"},"recipient_email":{"type":"string"},"channels":{"type":"array","items":{"type":"string","enum":["supercarl_direct_message","supercarl_invite","supercarl_referral_request","gmail_send","linkedin_send_message","x_send_message","instagram_send_message"]},"description":"Cached precheck channels; Gmail resolution requires send_communication."},"history_channel":{"type":"string","enum":["all","email","super_carl","linkedin","x","instagram"],"description":"History channel."},"limit":{"type":"number","minimum":1,"maximum":50},"offset":{"type":"number","minimum":0},"communication_id":{"type":"string","description":"Required for status."},"wait_ms":{"type":"number","minimum":0,"maximum":30000,"description":"Bounded status wait in milliseconds (max 30000)."},"wait_until":{"type":"string","enum":["terminal","first_progress"]}},"required":["mode"],"additionalProperties":false}},{"name":"project_read","title":"Read Super Carl projects","description":"Use this when you need read-only project information: project list/status, shortlist targets, outreach metrics, or send readiness. This tool does not add/remove targets, generate drafts, resolve recipient emails, activate delivery, or create exports. Use project_action for project mutations and bulk_export for CSV or Google Sheets preview, start, and status flows.","scope":"communications","annotations":{"title":"Read Super Carl projects","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["list","status","targets","metrics","send_readiness"],"description":"Read list, status, targets, metrics, or send_readiness."},"delegate_user_id":{"type":"string"},"agent_session_id":{"type":"string"},"project_id":{"type":"string","description":"Project UUID; omit for the session project."},"status":{"type":"string"},"search":{"type":"string"},"include_archived":{"type":"boolean"},"archived":{"type":"boolean","description":"List archived-only or active-only rows."},"include_searches":{"type":"boolean"},"include_conversations":{"type":"boolean"},"include_targets":{"type":"boolean"},"include_mutuals":{"type":"boolean"},"limit":{"type":"number","minimum":1,"maximum":100},"offset":{"type":"number","minimum":0}},"required":["mode"],"additionalProperties":false}},{"name":"social_proximity_status","title":"Read social proximity research status","description":"Use this when you need cached social-proximity or mutual-research status for one explicitly selected target, especially when a prior response says mutuals were researched recently. Never fan this tool out across every row of a shortlist: people_search relationship_detail:\"intro_paths\" already returns batched answer-ready paths. This read-only tool never starts, continues, resets, or refreshes LinkedIn mutual research; use social_proximity_research only when the user explicitly asks for warm-intro research and the status is not_started, failed, or stale. Omitted path limits default to one compact best path/mutual; set an explicit limit only when the user asks for deeper connector detail.","scope":"search","annotations":{"title":"Read social proximity research status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"target_user_id":{"type":"string","description":"Super Carl user id for the target person. Copy this from people_search or people_lookup_batch."},"delegate_user_id":{"type":"string","description":"Optional team-seat user id to act as."},"agent_session_id":{"type":"string"},"intro_path_limit":{"type":"number","minimum":0,"maximum":20,"description":"Maximum confirmed-mutual warm-intro paths to return (compact default 1, server max 20)."},"possible_intro_limit":{"type":"number","minimum":0,"maximum":100,"description":"Maximum experience-intersection possible intro paths to return (compact default 1, server max 100)."},"possible_intro_offset":{"type":"number","minimum":0,"description":"Zero-based offset into possible intro path pagination."},"mutual_connection_limit":{"type":"number","minimum":0,"maximum":500,"description":"Maximum cached mutual connections to return for this page (compact default 1, server max 500)."},"mutual_connection_offset":{"type":"number","minimum":0,"description":"Zero-based offset into cached mutual connection pagination."}},"required":["target_user_id"],"additionalProperties":false}},{"name":"linkedin_conversation_research_status","title":"Read LinkedIn conversation research status","description":"Read-only status for a previously started LinkedIn conversation-research run. Never starts or continues browser work.","scope":null,"annotations":{"title":"Read LinkedIn conversation research status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","additionalProperties":false,"required":["run_id"],"properties":{"run_id":{"type":"string","description":"Conversation-research run UUID returned by linkedin_conversation_research."},"limit":{"type":"integer","minimum":1,"maximum":100},"agent_session_id":{"type":"string"}}}},{"name":"linkedin_conversation_research_delete_data","title":"Delete LinkedIn conversation research data","description":"Destructively and permanently delete only the authenticated owner’s LinkedIn conversation-research/import data. It immediately disables continuous conversation tracking, preserves LinkedIn connections and Carl outreach-reply tracking, and requires user_confirmed=true for this exact request.","scope":null,"annotations":{"title":"Delete LinkedIn conversation research data","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","additionalProperties":false,"required":["user_confirmed"],"properties":{"user_confirmed":{"type":"boolean","description":"Must be true only when the user explicitly confirmed deletion of their LinkedIn conversation research and imported message data in this current request."}}}},{"name":"watch_signals_read","title":"Read Scan My Network watches","description":"Read recurring Scan My Network watches without changing them: role_packs, status, runs, updates, hits, evidence, delivery_status, or delivery_subscriptions. Use next_cursor to poll updates; subscription reads redact credentials.","scope":"communications","annotations":{"title":"Read Scan My Network watches","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["role_packs","status","hits","evidence","delivery_status","runs","updates","delivery_subscriptions"],"description":"Required read: role_packs, status, runs, updates, hits, evidence, delivery_status, or delivery_subscriptions."},"delegate_user_id":{"type":"string"},"agent_session_id":{"type":"string"},"project_id":{"type":"string"},"watch_config_id":{"type":"string"},"signal_hit_id":{"type":"string"},"citation_id":{"type":"string"},"delivery_channel":{"type":"string","enum":["project_feed","app_push","email_digest","agent_webhook","mcp_stream"]},"status":{"type":"string","enum":["draft","active","paused","error","archived"]},"state":{"type":"string","enum":["new","notified","reviewed","added_to_project","drafted","dismissed","snoozed","stale"]},"limit":{"type":"number","minimum":1,"maximum":100},"offset":{"type":"number","minimum":0},"after_cursor":{"type":"string"},"include_revoked":{"type":"boolean"}},"required":["mode"],"additionalProperties":false}},{"name":"social_proximity_research","title":"Research social proximity mutuals","description":"Start background LinkedIn mutual-connection and warm-intro research for one already-known person. Use only for an explicit mutuals, connector, or warmest-path request when research is not started, failed, stale, or explicitly refreshed; call at most once per target per request. Confirmed mutuals and experience-overlap possible paths remain distinct. Use social_proximity_status to poll without starting work.","scope":"search","annotations":{"title":"Research social proximity mutuals","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"target_user_id":{"type":"string","description":"Required Super Carl person UUID from people_search or people_lookup_batch."},"delegate_user_id":{"type":"string","description":"Optional permitted team-seat user id to act as."},"reset":{"type":"boolean","description":"Restart stale or prior mutual research; recent completed work may still be reused."},"intro_path_limit":{"type":"number","description":"Confirmed-mutual paths to return (default 3, max 20)."},"possible_intro_limit":{"type":"number","description":"Experience-overlap possible paths to return (default 20, max 100)."},"possible_intro_offset":{"type":"number","description":"Pagination offset for experience-overlap possible paths."},"mutual_connection_limit":{"type":"number","description":"Mutual-connection preview page size (default 50, max 500)."},"mutual_connection_offset":{"type":"number","description":"Pagination offset for persisted mutual connections."},"status_only":{"type":"boolean","description":"Compatibility read-only poll; prefer social_proximity_status."},"agent_session_id":{"type":"string"}},"required":["target_user_id"],"additionalProperties":false}},{"name":"linkedin_conversation_research","title":"Start LinkedIn conversation research","description":"Start an explicitly confirmed, owner-scoped LinkedIn conversation-history research run for up to 100 conversations. Work is read-only toward LinkedIn and continues in bounded resumable pages; it never sends messages. Requires user_confirmed=true for this exact request. Persist continuous_sync only when the user explicitly chose it; omit it otherwise.","scope":null,"annotations":{"title":"Start LinkedIn conversation research","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","additionalProperties":false,"required":["user_confirmed"],"properties":{"limit":{"type":"integer","enum":[100],"description":"Optional compatibility field. Conversation research is fixed at up to 100 conversations and processes one bounded page at a time."},"user_confirmed":{"type":"boolean","description":"Must be true only when the user explicitly confirmed this current request."},"continuous_sync":{"type":"boolean","description":"Optional explicit owner choice. True opts into a recurring read-only refresh of the 20 most recent conversations on the LinkedIn connection-sync cadence; false opts out. Omit to leave the setting unchanged."},"agent_session_id":{"type":"string"}}}},{"name":"send_communication","title":"Precheck, draft, send, or poll communications, including Instagram DMs","description":"Draft or send one reviewed outreach message through Gmail/email, LinkedIn DM or connection note, Instagram DM, X DM, or Super Carl direct/referral messaging. Modes: precheck, history, draft, send, status, cancel. Live send requires user_confirmed:true; use communication_read for cached read-only checks and project_action for whole-project delivery. Draft/send to a direct target requires a prior channel precheck for that target in this session (mode=\"precheck\" here, or communication_read mode=\"precheck\"); without one the call fails closed with code=\"precheck_required\" plus a ready-to-run required_next_call precheck. Discovery keywords: Instagram DM, Instagram direct message, instagram_send_message, instagram_username, instagram_profile_url. Use people_search first when the user names an Instagram contact without a handle; call directly when target_user_id, project_target_id, instagram_username, or instagram_profile_url is known.","scope":"communications","annotations":{"title":"Precheck, draft, send, or poll communications, including Instagram DMs","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["precheck","history","draft","send","status","cancel"],"description":"Required operation: precheck, history, draft, send, status, or cancel."},"delegate_user_id":{"type":"string"},"agent_session_id":{"type":"string"},"project_id":{"type":"string","description":"Optional project id. Usually omitted for MCP; Super Carl creates/binds it when drafting/sending in an agent session."},"project_target_id":{"type":"string","description":"Optional project target row id returned by project_action.targets."},"target_user_id":{"type":"string"},"linkedin_profile_url":{"type":"string"},"linkedin_username":{"type":"string"},"x_profile_url":{"type":"string"},"x_username":{"type":"string"},"instagram_profile_url":{"type":"string"},"instagram_username":{"type":"string"},"recipient_email":{"type":"string","description":"Reviewed Gmail address."},"allow_email_enrichment":{"type":"boolean","description":"Force paid Gmail resolution; Gmail-only precheck resolves automatically."},"channels":{"type":"array","items":{"type":"string","enum":["supercarl_direct_message","supercarl_invite","supercarl_referral_request","gmail_send","linkedin_send_message","x_send_message","instagram_send_message"]},"description":"Precheck channels; omit for all."},"channel":{"type":"string","enum":["supercarl_direct_message","supercarl_invite","supercarl_referral_request","gmail_send","linkedin_send_message","x_send_message","instagram_send_message","all","email","super_carl","linkedin","x","instagram"],"description":"Draft/send channel; history-only aliases are invalid for send."},"history_channel":{"type":"string","enum":["all","email","super_carl","linkedin","x","instagram"],"description":"History channel."},"limit":{"type":"number","minimum":1,"maximum":50},"offset":{"type":"number"},"history_fresh":{"type":"boolean","description":"Queue fresh LinkedIn history when current no-DM proof is needed; immediate data may remain cached."},"connector_user_id":{"type":"string","description":"Connector for a referral request."},"message":{"type":"string","description":"Final draft/send body."},"subject":{"type":"string","description":"Gmail subject."},"connect_note":{"type":"boolean","description":"LinkedIn connection note only when requested; not a DM (200-character max)."},"dry_run":{"type":"boolean","description":"Validate without live delivery."},"wait_ms":{"type":"number","minimum":0,"maximum":30000,"description":"Bounded wait in milliseconds (max 30000)."},"wait_until":{"type":"string","enum":["terminal","first_progress"]},"user_confirmed":{"type":"boolean","description":"Required for a live send."},"idempotency_key":{"type":"string","description":"Optional send dedupe key."},"communication_id":{"type":"string","description":"Required for status or cancel."},"reason":{"type":"string"}},"required":["mode"],"additionalProperties":false}},{"name":"project_action","title":"Read and update Super Carl projects","description":"Manage a Super Carl project/shortlist. Use project_read for read-only list/status/targets/metrics/send readiness. Writes include add_targets/remove_targets, rename, generate_templates/generate_messages, update_message, retry_failed_linkedin_sends, activate, archive, and unarchive. Use bulk_export—not project_action—for CSV or Google Sheets preview/start/status flows. Archiving stops project watches; restoring does not restart them. Carry exact project_id or agent_session_id. For 1-3 standalone sends use send_communication; use project drafting/activation for saved or larger batches. Never claim mutation or delivery success before the result.","scope":"communications","annotations":{"title":"Read and update Super Carl projects","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["list","status","targets","recipient_emails","metrics","send_readiness","add_targets","remove_targets","retry_failed_linkedin_sends","rename","update_engagement_mode","update_templates","generate_templates","generate_messages","update_message","activate","archive","unarchive"],"description":"Operation. Read with project_read when possible; writes include add/remove targets, draft/template changes, retry, activate, archive, and unarchive. Use bulk_export for CSV or Google Sheets output."},"project_id":{"type":"string","description":"Stable project UUID. Omit when agent_session_id is already bound to the project."},"agent_session_id":{"type":"string"},"delegate_user_id":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"},"status":{"type":"string"},"search":{"type":"string"},"include_archived":{"type":"boolean"},"archived":{"type":"boolean"},"include_searches":{"type":"boolean"},"include_conversations":{"type":"boolean"},"include_targets":{"type":"boolean"},"include_mutuals":{"type":"boolean"},"title":{"type":"string"},"engagement_mode":{"type":"string","enum":["quick_text","schedule_live"]},"engagement_mode_schedule_live_duration":{"type":"number"},"outreach_message_prompt":{"type":"string"},"email_subject_template":{"type":"string"},"engagement_meta_prompt":{"type":"string"},"engagement_prompt":{"type":"string"},"referral_intro_prompt":{"type":"string"},"referral_forward_note_prompt":{"type":"string"},"outreach_intent_type":{"type":"string"},"outreach_intent_description":{"type":"string"},"outreach_personalization_prompt":{"type":"string"},"clear_personalization":{"type":"boolean"},"template_type":{"type":"string","enum":["email_subject_template","outreach_message_prompt","engagement_meta_prompt","engagement_prompt","pitch","referral_intro_prompt","referral_forward_note_prompt","generalize_message_to_template"]},"user_input":{"type":"string"},"message":{"type":"string","description":"Exact final per-target draft text, or source copy for template generalization."},"message_source":{"type":"string","enum":["ai_generated","user_edited"]},"review_action":{"type":"string","enum":["save","approve"]},"contact_channel":{"type":"string"},"recipient_email":{"type":"string"},"linkedin_lookup":{"type":"boolean"},"project_target_id":{"type":"string","description":"For mode=\"update_message\": project target row id from mode=\"targets\"."},"target_ids":{"type":"array","items":{"type":"string"}},"target_user_ids":{"type":"array","maxItems":100,"items":{"type":"string"},"description":"Person UUIDs from search/project results for add_targets or remove_targets."},"cohort_ref":{"type":["string","object"],"properties":{"key":{"type":"string"}},"required":["key"],"additionalProperties":false,"description":"add_targets: people_search cohort_refs[] handle for that returned set. Explicit ids win; expires ~15 min."},"target_user_id":{"type":"string","description":"One person UUID for target, email-resolution, or message operations."},"remove_all":{"type":"boolean"},"persist_target":{"type":"boolean"},"regenerate":{"type":"boolean"},"user_confirmed":{"type":"boolean","description":"Required true for mutating modes except add_targets after an explicit save/shortlist request."}},"required":["mode"],"additionalProperties":false}},{"name":"bulk_export","title":"Preview, start, and track project exports","description":"Preview, confirm, start, and track private project exports: CSV exports up to 5,000 rows or Google Sheets up to 500 rows. Non-empty exports cost max(1, completed rows / 100) credits; enrich_missing email lookups and Carl-hosted model generation are billed at provider cost ($0.099 per credit). For N rows, pass row_limit=N unchanged to preview and start; omit it for the destination maximum. Preview returns headers, sample rows, counts, costs, and timing without creating a task. Start requires confirmation and its exact preview_id. Status accepts task_id or resolves the latest owned one-time export in the current project/conversation. CSV delivery goes only to the requesting user primary email.","scope":"communications","annotations":{"title":"Preview, start, and track project exports","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"destination":{"type":"string","enum":["csv","google_sheet"],"description":"csv (max 5,000) or google_sheet (max 500)."},"action":{"type":"string","enum":["preview","start","status"],"description":"preview first; start after confirmation; status checks a started export."},"project_id":{"type":"string"},"source_search_id":{"type":"string","description":"Exact source_search_id returned by the successful people_search results call being exported."},"preview_id":{"type":"string"},"task_id":{"type":"string","description":"Started export task UUID; omit it on status to resolve the latest owned one-time export."},"data_set":{"type":"string","enum":["top_results","selected_targets"]},"row_limit":{"type":"integer","minimum":1,"maximum":5000,"description":"Row cap; repeat unchanged on preview/start."},"include_match_reasons":{"type":"boolean"},"match_reason_mode":{"type":"string","enum":["light","verbose"],"description":"light evidence or CSV-only verbose LLM reasons."},"include_status":{"type":"boolean"},"include_experiences":{"type":"boolean"},"include_posts":{"type":"boolean"},"include_personalized_message":{"type":"boolean"},"personalized_message_mode":{"type":"string","enum":["only_if_present","generate"],"description":"Use saved messages or generate missing ones."},"include_professional_email":{"type":"boolean"},"professional_email_mode":{"type":"string","enum":["only_if_present","enrich_missing"],"description":"Use cached email or enrich missing email at disclosed provider cost."},"file_name":{"type":"string"},"force_new_sheet":{"type":"boolean"},"user_confirmed":{"type":"boolean","description":"True only for the exact reviewed start preview."},"agent_session_id":{"type":"string"}},"required":["destination","action"],"additionalProperties":false}},{"name":"contacts_action","title":"Manage contact export, reconciliation, and enrichment","description":"Run one Super Carl contact workflow: action=\"export\" estimates/starts/checks the all-contacts Google Sheet export; action=\"reconcile\" previews/applies contact spreadsheet reconciliation and review updates; action=\"enrich\" estimates/releases verified work emails for a vetted list of Super Carl person ids. Mutating modes still require the same user_confirmed safeguards as the underlying workflow.","scope":"contacts-write","annotations":{"title":"Manage contact export, reconciliation, and enrichment","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["export","reconcile","enrich"],"description":"Which contact workflow to run: export, reconcile, or enrich."},"export":{"type":"object","properties":{"mode":{"type":"string","enum":["estimate","start","status","latest"]},"export_id":{"type":"string"},"providers":{"type":"array","items":{"type":"string","enum":["linkedin","gmail","contacts","x","instagram"]},"maxItems":5},"field_groups":{"type":"array","items":{"type":"string","enum":["identity","networks","email","relationship","match_status"]},"maxItems":5},"optional_field_groups":{"type":"array","items":{"type":"string","enum":["profile_summary","profile_location","profile_metrics","profile_picture","profile_skills","profile_experience_summary","profile_experiences_json","profile_education_json","profile_company_metadata","profile_social_urls","profile_activity"]},"maxItems":11},"include_email_enrichment":{"type":"boolean"},"include_unresolved":{"type":"boolean"},"user_confirmed":{"type":"boolean"}},"required":["mode"],"additionalProperties":false,"description":"For action=\"export\": contacts export payload. Use mode=\"estimate\" first, then mode=\"start\" only with user_confirmed=true."},"reconcile":{"type":"object","properties":{"mode":{"type":"string","enum":["schema","start_run","preview_batch","apply_batch","status","finalize","list_review","get_candidates","confirm_candidate","correct_resolution","bulk_correct_resolutions","bulk_confirm_candidates","bulk_reject_candidates","bulk_mark_needs_review","bulk_ignore_entities","bulk_restore_entities","mark_needs_review","reject_candidate","ignore_entity","restore_entity"]},"delegate_user_id":{"type":"string"},"run_id":{"type":"string"},"source_label":{"type":"string"},"rows":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":true,"required":["external_row_id"],"properties":{"external_row_id":{"type":"string"},"source_sheet":{"type":"string"},"source_row_number":{"type":"number"},"display_name":{"type":"string"},"carl_contact_id":{"type":"string"},"carl_profile_url":{"type":"string"},"linkedin_url":{"type":"string"},"x_username":{"type":"string"},"instagram_username":{"type":"string"},"primary_email":{"type":"string"},"imported_phone":{"type":"string"},"current_title":{"type":"string"},"current_company":{"type":"string"},"relationship_flags":{"type":"array","items":{"type":"string"}},"sheet_match_status":{"type":"string","enum":["resolved","likely_match","unresolved"]},"sheet_match_score":{"type":"number"},"owned_fields":{"type":"array","items":{"type":"string"}},"enriched_fields":{"type":"array","items":{"type":"string"}},"notes":{"type":"string"}}}},"batch_index":{"type":"number"},"options":{"type":"object","additionalProperties":true,"properties":{"allow_identity_resolution":{"type":"boolean"},"identity_resolution_limit":{"type":"number"}}},"bucket":{"type":"string","enum":["approved","likely_match","needs_review","unresolved","ignored"]},"entity_id":{"type":"string"},"entity_ids":{"type":"array","maxItems":100,"items":{"type":"string"}},"candidate_user_id":{"type":"string"},"candidate_snapshot":{"type":"object","additionalProperties":true},"incorrect_candidate_user_id":{"type":"string"},"replacement_candidate_user_id":{"type":"string"},"replacement_linkedin_url":{"type":"string"},"corrections":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"required":["entity_id","incorrect_candidate_user_id"],"properties":{"entity_id":{"type":"string"},"incorrect_candidate_user_id":{"type":"string"},"replacement_candidate_user_id":{"type":"string"},"replacement_linkedin_url":{"type":"string"}}}},"review_items":{"type":"array","maxItems":100,"items":{"type":"object","additionalProperties":true,"required":["entity_id"],"properties":{"entity_id":{"type":"string"},"candidate_user_id":{"type":"string"},"candidate_snapshot":{"type":"object","additionalProperties":true}}}},"query":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"},"response_verbosity":{"type":"string","enum":["compact","minimal","detailed"]},"minimal_fields":{"type":"boolean"},"user_confirmed":{"type":"boolean"}},"required":["mode"],"additionalProperties":false,"description":"For action=\"reconcile\": contact reconciliation payload. Use schema/start/preview/read modes before apply/finalize/review mutations that require user_confirmed=true."},"enrich":{"type":"object","properties":{"mode":{"type":"string","enum":["estimate","run"]},"person_ids":{"type":"array","minItems":1,"maxItems":25,"items":{"type":"string"}},"user_confirmed":{"type":"boolean"},"minimum_confidence":{"type":"string","enum":["usable","validated"]},"agent_session_id":{"type":"string"}},"required":["person_ids"],"additionalProperties":false,"description":"For action=\"enrich\": work-email enrichment payload. Use mode=\"estimate\" first, then mode=\"run\" only with user_confirmed=true."},"agent_session_id":{"type":"string"}},"required":["action"],"additionalProperties":false}},{"name":"watch_signals","title":"Create and inspect Scan My Network watches","description":"Preview or edit a recurring Scan My Network watch. Preview returns preview_id + prepared_watch for create. Mutating watch_signals calls require approval. Use watch_signals_read for hits, evidence, and delivery.","scope":"communications","annotations":{"title":"Create and inspect Scan My Network watches","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["preview","create","activate","role_packs","update","update_schedule","subscribe_delivery","unsubscribe_delivery","status","hits","evidence","delivery_status","run_now","pause","resume","archive","snooze_hit","dismiss_hit","promote_hit"],"description":"Operation; use watch_signals_read for read-only calls."},"project_id":{"type":"string","description":"Project id; omit on create to auto-create a Scan My Network project."},"agent_session_id":{"type":"string"},"conversation_backed":{"type":"boolean"},"watch_config_id":{"type":"string"},"title":{"type":"string"},"watch_prompt":{"type":"string","description":"Natural-language watch objective; preserve user wording."},"preview_id":{"type":"string","description":"Preview checksum; pass unchanged with prepared_watch to create."},"prepared_watch":{"type":"object","additionalProperties":true,"description":"Preview recipe; pass unchanged with preview_id to create."},"baseline_mode":{"type":"string","enum":["future_changes_only","include_current_matches"],"description":"future_changes_only = silent baseline; include_current_matches may deliver current matches on the first scheduled run."},"role_intent":{"type":"string","enum":["gtm","founder","sales","job_seeker","recruiter","investor","bd","networking","general"],"description":"User intent pack used to tune signals and later outreach."},"role_pack_key":{"type":"string"},"role_pack_version":{"type":"number"},"source_kind":{"type":"string","enum":["freeform_scope","spreadsheet","account_list","network_scope","watch_list","owner_profile","owner_posts","owned_audience","competitor_set","company","people_list","job_search"],"description":"Primary durable source kind when sources is omitted."},"sources":{"type":"array","items":{"type":"object","properties":{"source_kind":{"type":"string","enum":["freeform_scope","spreadsheet","account_list","network_scope","watch_list","owner_profile","owner_posts","owned_audience","competitor_set","company","people_list","job_search"]},"label":{"type":"string"},"value":{"type":"string"},"url":{"type":"string"},"external_id":{"type":"string"},"notes":{"type":"string"}},"additionalProperties":true},"description":"Durable inputs; items may include source_kind, label, value/url/id, and notes."},"signal_types":{"type":"array","items":{"type":"string","enum":["posts","liked_my_post","competitor_engagement","role_change","jobs","employee_post","company_growth","hiring_spike","warm_intro","follow_up"]},"description":"Signal lanes; omit to infer from prompt and sources."},"scope":{"type":"object","additionalProperties":true,"description":"Structured company/title/location/network/freshness/post constraints."},"cadence":{"type":"object","additionalProperties":true},"schedule":{"type":"object","properties":{"frequency":{"type":"string","enum":["daily","weekly"]},"at":{"type":"string"},"timezone":{"type":"string"},"weekday":{"type":"string","enum":["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]}},"additionalProperties":false,"description":"Daily/weekly schedule: local 24-hour time, IANA timezone, and weekday for weekly."},"freshness_policy":{"type":"object","additionalProperties":true},"delivery_channels":{"type":"array","items":{"type":"string","enum":["project_feed","app_push","email_digest","agent_webhook","mcp_stream"]}},"notification_policy":{"type":"object","additionalProperties":true},"callback_policy":{"type":"object","additionalProperties":true},"credit_policy":{"type":"object","additionalProperties":true},"action_policy":{"type":"object","additionalProperties":true},"final_tool_calls":{"type":"array","items":{"type":"object","additionalProperties":true}},"related_search_activity_ids":{"type":"array","items":{"type":"string"}},"search_summaries":{"type":"array","items":{"type":"object","additionalProperties":true}},"source_result_preview_metadata":{"type":"object","additionalProperties":true},"evidence_items":{"type":"array","items":{"type":"object","additionalProperties":true}},"primary_evidence_id":{"type":"string"},"status":{"type":"string","enum":["draft","active","paused","error","archived"]},"state":{"type":"string","enum":["new","notified","reviewed","added_to_project","drafted","dismissed","snoozed","stale"]},"signal_hit_id":{"type":"string"},"signal_hit_ids":{"type":"array","items":{"type":"string"},"maxItems":25,"description":"promote_hit only: batch of up to 25 hit ids; same review-only draft semantics per hit."},"draft_message":{"type":"boolean","description":"promote_hit only: save a review-only outreach draft; never sends it."},"message":{"type":"string","description":"Optional exact outreach copy to save instead of generating it."},"snoozed_until":{"type":"string"},"citation_id":{"type":"string"},"delivery_channel":{"type":"string","enum":["project_feed","app_push","email_digest","agent_webhook","mcp_stream"]},"target_type":{"type":"string","enum":["email","mcp_feed","webhook","openai_workspace_agent","slack_channel"],"description":"subscribe_delivery target: email, mcp_feed, webhook, openai_workspace_agent, or slack_channel."},"target_id":{"type":"string"},"target_status":{"type":"string","enum":["paused","revoked"]},"webhook_url":{"type":"string","description":"Public HTTPS endpoint for signed webhook delivery."},"signing_secret":{"type":"string"},"workspace_agent_id":{"type":"string","description":"OpenAI Workspace Agent id beginning with agtch_."},"access_token":{"type":"string"},"slack_workspace_id":{"type":"string","description":"Slack workspace id for a Slack delivery target."},"slack_workspace_name":{"type":"string"},"slack_channel_id":{"type":"string","description":"Slack channel id for a Slack delivery target."},"slack_channel_name":{"type":"string"},"slack_thread_ts":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"},"delegate_user_id":{"type":"string"}},"additionalProperties":false}},{"name":"get_product_help","title":"Get Super Carl product help","description":"Fetch canonical help for Super Carl UI navigation, product overview/how Carl works, settings, integration setup, X/Instagram sync diagnostics, social-proximity scoring, relationship signals, or warm-intro paths. Call topic=\"index\" to discover topic ids; call a specific id for canonical markdown plus applicable live user state (LinkedIn, Gmail/Contacts/Calendar/Slack/X/Instagram, notification toggles, timezone, plan tier, availability) and an external docs URL when available. Call before describing Super Carl UI or behavior, including \"What do you do?\", \"How do you work?\", or feature availability; never invent screen names, labels, or availability. If a topic guess is wrong, use topic=\"index\" or another id. Use topic=\"try_ask_examples\" for editable people-search or network-watch examples.","scope":"product_knowledge","annotations":{"title":"Get Super Carl product help","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"topic":{"type":"string","enum":["index","calendar_availability","claude_connector","contacts_sync","conversations","engagement_tracking","follow_ups","gmail_sync","integrations","invites","linkedin_sync","mcp_codex","network","notifications","outreach_drafting","profile","projects","searches","settings","slack_integration","social_proximity","try_ask_examples","usage","voice","what_is_carl","x_instagram_sync"],"description":"Topic id, or \"index\" to discover available topic ids and their titles/routes."}},"required":["topic"],"additionalProperties":false}},{"name":"account_read","title":"Read your Super Carl account, network, credits, profile, or invite link","description":"Read the authenticated owner's Super Carl account data. get_account answers \"what is my name on Super Carl?\" without credits. get_credit_status answers \"how many Super Carl credits do I have?\" with balance and refresh details; it consumes no credits and remains available at zero. get_profile returns the full professional profile directly and may use a lookup credit. get_network_status returns LinkedIn connection counts and sync progress. get_invite_link returns the personal invite link. Owner-only and read-only.","scope":"action-dependent","annotations":{"title":"Account read","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"action_id":{"type":"string","enum":["get_account","get_credit_status","get_profile","get_network_status","get_invite_link"],"description":"Use get_network_status, not get_profile, for connection-count and sync-progress questions in any language."}},"required":["action_id"],"additionalProperties":false}},{"name":"report_feedback","title":"Report a problem to Super Carl","description":"Submit product feedback directly to Super Carl. For an unresolved failure, dead end, wrong or insufficient result, or user complaint, offer this once. When the user asks for a ticket, file it that same turn: show every exact non-empty ticket field and trace id, say the authenticated account and available trace are attached and the ticket may be reviewed by a Super Carl team member or handled agentically, then call. feedback_text is the only required argument; never ask a second time. Offer and wait only when the user has not asked. Use this Super Carl ticket instead of Gmail or email unless the user explicitly asks to send an email. Never include secrets, full conversations/tool payloads, or third-party PII. Do not retry the same issue.","scope":"authenticated","annotations":{"title":"Report feedback","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"user_confirmed":{"type":"boolean","description":"Profile/settings writes only."},"feedback_text":{"type":"string","description":"Ticket text."},"signal_type":{"type":"string","enum":["failure","retry_loop","dead_end","parameter_confusion","response_shape","slow_performance","abandonment","feature_gap","other"],"description":"Signal."},"tool_name":{"type":"string","description":"Tool."},"expected_outcome":{"type":"string","description":"Expected."},"observed_outcome":{"type":"string","description":"Observed."},"agent_session_id":{"type":"string"},"search_id":{"type":"string","description":"Search."},"search_activity_id":{"type":"string","description":"Search alias."}},"required":["feedback_text"],"additionalProperties":false}},{"name":"super_carl_action","title":"Update Super Carl settings or inspect a LinkedIn connection","description":"Write-capable authenticated owner actions. update_profile changes only confirmed name, bio, or about_override and requires profiles-write. set_timezone and set_notification_preferences apply confirmed settings changes. claim_bonus_credits claims the one-time MCP recruiting launch bonus after the user asks. inspect_linkedin_connection verifies one target relationship only when another communications response provides that affordance. Not an account/profile read or people/company/job/post search tool.","scope":"action-dependent","annotations":{"title":"Super Carl action","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"action_id":{"type":"string","enum":["update_profile","set_timezone","set_notification_preferences","claim_bonus_credits","inspect_linkedin_connection"],"description":"Action. inspect_linkedin_connection: target person only; never account/source/session/sync or people_search preflight."},"user_confirmed":{"type":"boolean","description":"Profile/settings writes only."},"profile_updates":{"type":"object","description":"Profile edits.","properties":{"name":{"type":"string","minLength":1,"maxLength":25},"bio":{"type":["string","null"],"maxLength":500},"about_override":{"type":["string","null"],"maxLength":4000}},"additionalProperties":false},"timezone":{"type":"string","description":"IANA zone."},"allow_notification_sms":{"type":["boolean","null"],"description":"Toggle."},"allow_notification_email":{"type":["boolean","null"],"description":"Toggle."},"allow_notification_push":{"type":["boolean","null"],"description":"Toggle."},"allow_notification_direct_msg":{"type":["boolean","null"],"description":"Toggle."},"allow_notification_invites":{"type":["boolean","null"],"description":"Toggle."},"allow_notification_watch":{"type":["boolean","null"],"description":"Toggle."},"target_linkedin_url":{"type":"string","description":"LinkedIn URL."},"target_linkedin_username":{"type":"string","description":"LinkedIn vanity."},"target_user_id":{"type":"string","description":"Optional user."}},"required":["action_id"],"additionalProperties":false}},{"name":"admin_ads_read","title":"Admin: Meta ads read","description":"Admin-only curated reads on the configured Meta ad account: list/get campaigns, ad sets, ads, creatives, conversion readiness, and bounded insights (<=93 days). Pass {action, args}; per-action arg schemas: admin_metrics_catalog domain \"ads\". Requires ADMIN_ADS_READ_ENABLED.","scope":"admin_metrics","annotations":{"title":"Admin: Meta ads read","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["get_official_mcp_capabilities","get_conversion_readiness","list_campaigns","get_campaign","list_adsets","get_adset","list_ads","get_ad","get_ad_creatives","get_insights"],"description":"Read action id (schemas: admin_metrics_catalog domain \"ads\")."},"args":{"type":"object","description":"Action arguments; validated in-service against the per-action schema.","additionalProperties":true}},"required":["action"],"additionalProperties":false}},{"name":"admin_ads_write","title":"Admin: Meta ads management","description":"Admin-only, confirmation-gated Meta ads writes: pause/resume ads+ad sets, adset budgets, paused-only creates, and pinned conversion-asset access. First call returns a preview + pending_confirmation_id; execute with action \"confirm\", abort with \"cancel\". Schemas: admin_metrics_catalog domain \"ads\".","scope":"admin_metrics","annotations":{"title":"Admin: Meta ads management","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["share_configured_ad_account_with_business","share_conversion_pixel_with_ad_account","pause_ad","resume_ad","pause_adset","resume_adset","update_adset_budget","create_campaign","create_adset","upload_ad_image","create_ad_creative","create_ad","duplicate_entity","confirm","cancel"],"description":"Write action id, or \"confirm\"/\"cancel\" for a pending confirmation."},"args":{"type":"object","description":"Action arguments; validated in-service against the per-action schema.","additionalProperties":true},"pending_confirmation_id":{"type":"string","description":"Pending confirmation id for action \"confirm\"/\"cancel\" (from a prior pending_confirmation result)."}},"required":["action"],"additionalProperties":false}},{"name":"admin_feedback_dispatch","title":"Admin: Feedback response dispatch","description":"Admin-only, audited release path for one committed plan item on either feedback channel: a .json.to-be-validated addressed-feedback email item, or a registered conversation-repair item that posts a new Carl message, grants 10 credits, and emails a concise summary plus conversation link. Loads recipient, dispatch key, copy, and credits from the server-owned plan; accepts concrete validation evidence; previews or idempotently sends it without renaming or redeploying. Legacy queue and inline-plan registration actions remain temporarily available while historical plan items are migrated; new repair work uses admin_feedback_orchestration and database state.","scope":"admin_metrics","annotations":{"title":"Admin: Feedback response dispatch","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["preview","dispatch","queue","register"],"description":"Preview or dispatch a held plan item; list the open conversation-repair queue; or register an inline conversation-repair plan preview."},"queue_since_days":{"type":["number","null"],"description":"queue only: look-back window in days (default 14, max 90)."},"queue_limit":{"type":["number","null"],"description":"queue only: maximum candidates returned (default 50, max 200)."},"plan":{"type":["object","null"],"description":"Legacy register only: a complete historical conversation-repair plan object. Registration is preview-only and never dispatches. New work must use admin_feedback_orchestration and must not create a JSON plan."},"plan_id":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,199}$","description":"Committed held plan id; never a path or filename."},"item_id":{"type":"string","minLength":1,"maxLength":200,"description":"Exact item id within the held plan."},"validation_environment":{"type":"string","enum":["prod","staging"],"description":"Environment in which the fix was validated."},"validated_at":{"type":["string","null"],"description":"ISO-8601 validation timestamp; null uses the server time."},"validation_details":{"type":"string","minLength":20,"maxLength":8000,"description":"Concrete internal evidence such as request shape, duration, result count, timeout/retry state, and constraints checked."},"response_subject":{"type":["string","null"],"maxLength":300,"description":"Optional updated customer email subject; null retains the committed plan copy. Must be null for conversation repairs."},"response_message":{"type":["string","null"],"maxLength":12000,"description":"Optional updated body-only customer email copy; null retains the committed plan copy. Must be null for conversation repairs."},"confirm_dispatch":{"type":"boolean","description":"Must be true for action=\"dispatch\" after the operator reviews the preview."}},"required":["action"],"additionalProperties":false}},{"name":"admin_feedback_email_orchestration","title":"Admin: Feedback email orchestration","description":"Admin-only, audited database orchestration for email-channel feedback responses — feedback a user submitted, a recovered ticket, or an incident filed on their behalf. Adopts reviewed-but-unsent legacy rows, loads claim-fenced feedback context, records an exact-commit fix, validates an attested deployment, and previews or explicitly dispatches one server-owned email and 10-credit grant.","scope":"admin_metrics","annotations":{"title":"Admin: Feedback email orchestration","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["adopt_reviewed_unsent","context","status","record_fix","correct_target_environment","attest_deployment","record_validation_failure","complete_validation","preview","reconcile_sent_dispatch","dispatch"]},"feedback_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Exact feedback UUID."},"claim_token":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Private token returned by admin_feedback_review."},"expected_state_version":{"type":["integer","null"],"minimum":0},"event_limit":{"type":["integer","null"],"minimum":1,"maximum":200},"confirm_adoption":{"type":["boolean","null"]},"adoption_reason":{"type":["string","null"],"minLength":1,"maxLength":8000},"fix_commit_sha":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{40}$"},"fix_summary":{"type":["string","null"],"minLength":1,"maxLength":8000},"repository":{"type":["string","null"],"minLength":1,"maxLength":300},"branch":{"type":["string","null"],"minLength":1,"maxLength":300},"test_evidence":{"type":["object","null"]},"validation_instructions":{"type":["object","null"]},"target_environment":{"type":["string","null"],"enum":["staging","prod",null]},"expected_target_environment":{"type":["string","null"],"enum":["staging","prod",null]},"operator_reason":{"type":["string","null"],"minLength":1,"maxLength":8000},"confirm_target_environment_correction":{"type":["boolean","null"]},"deployed_commit_sha":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{40}$"},"validation_environment":{"type":["string","null"],"enum":["staging","prod",null]},"email_context_hash":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{64}$"},"validation":{"type":["object","null"]},"failure_summary":{"type":["string","null"],"minLength":1,"maxLength":8000},"response_subject":{"type":["string","null"],"minLength":1,"maxLength":300},"response_message":{"type":["string","null"],"minLength":1,"maxLength":12000},"confirm_dispatch":{"type":["boolean","null"]},"confirm_reconciliation":{"type":["boolean","null"]}},"required":["action"],"additionalProperties":false}},{"name":"admin_feedback_orchestration","title":"Admin: Feedback repair orchestration","description":"Admin-only, audited database orchestration for chat-monitor conversation repairs. Lists unclaimed work, reconciles an explicitly selected, previously missed server-authored presentation hold into the durable monitor queue, creates a distinct later-turn case after an operator confirms a linked follow-up failure, reopens narrowly eligible legacy reviewed rows after explicit operator confirmation, loads claimed durable context, records a commit-fenced fix, narrowly corrects a pre-deploy fix record or target environment, safely supersedes a validated but provably unsent preview after explicit operator confirmation, attests the running deployment from server-owned build evidence, escalates an operator decision, persists an explicitly authorized, operator-held non-code resolution against the running server build, deterministic validation evidence, executes a server-owned repair judge, safely closes server-verified archived-project or named-admin cases without user action, closes operator-confirmed duplicates, resolves operator decisions, retries bounded post-message delivery channels, reconciles ambiguous provider outcomes, and resumes the existing idempotent conversation repair dispatch.","scope":"admin_metrics","annotations":{"title":"Admin: Feedback repair orchestration","readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["queue","reconcile_detection","reconcile_followup_failure","context","status","record_fix","record_non_code_resolution","correct_fix","supersede_preview","correct_target_environment","attest_deployment","needs_operator","resolve_operator","close_no_action","close_duplicate","run_judge","complete_validation","resume_auto_dispatch","retry_delivery","resolve_delivery_hold","reopen_review","rerun_preview"],"description":"Database orchestration action."},"feedback_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Exact feedback UUID from queue or the consolidated admin feedback view."},"parent_feedback_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"reconcile_followup_failure only: exact parent chat-monitor feedback UUID selected by the operator."},"source_user_message_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"reconcile_detection/reconcile_followup_failure: exact durable user-message UUID for the selected turn."},"failed_agent_message_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"reconcile_detection: exact server-authored presentation hold; reconcile_followup_failure: exact durable completed Carl response selected by the operator."},"claim_token":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Server-returned admin_feedback_review token; required for claimed context and mutations."},"expected_state_version":{"type":["integer","null"],"minimum":0,"description":"Exact repair state version loaded before a mutation."},"queue_since_days":{"type":["number","null"],"minimum":1,"maximum":90,"description":"queue only: bounded look-back window; default 14 days."},"queue_limit":{"type":["integer","null"],"minimum":1,"maximum":200,"description":"queue only: maximum candidates; default 50."},"event_limit":{"type":["integer","null"],"minimum":1,"maximum":200,"description":"status only: maximum append-only events; default 50."},"fix_commit_sha":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{40}$","description":"record_fix/correct_fix/supersede_preview: full commit SHA containing the fix."},"resolution_kind":{"type":["string","null"],"enum":["config_change","web_research","external_data_refresh","manual_recovery",null],"description":"record_non_code_resolution only: narrow operator-authorized reason no resolving commit exists."},"resolution_summary":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"record_non_code_resolution only: bounded internal summary of the non-code resolution."},"resolution_evidence":{"type":["object","null"],"description":"record_non_code_resolution only: grounded evidence supporting the replay or hand-researched result."},"confirm_non_code_resolution":{"type":["boolean","null"],"description":"record_non_code_resolution only: must be true after explicit operator authorization of the exact override."},"fix_summary":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"record_fix/correct_fix/supersede_preview: internal diagnosis and scoped implementation summary."},"repository":{"type":["string","null"],"minLength":1,"maxLength":300,"description":"record_fix/correct_fix/supersede_preview: repository containing the committed fix."},"branch":{"type":["string","null"],"minLength":1,"maxLength":300,"description":"record_fix/correct_fix/supersede_preview: branch on which the fix commit was produced."},"test_evidence":{"type":["object","null"],"description":"record_fix/correct_fix/supersede_preview: commands/checks run and their bounded outcomes."},"validation_instructions":{"type":["object","null"],"description":"record_fix/correct_fix/supersede_preview/record_non_code_resolution: bounded replay and deterministic validation instructions."},"delivery_mode":{"type":["string","null"],"enum":["auto","operator",null],"description":"record_fix/correct_fix/supersede_preview: sticky delivery policy; record_fix defaults to auto, while correction/supersession preserves the existing value and may only downgrade auto to operator."},"target_environment":{"type":["string","null"],"enum":["local","staging","prod",null],"description":"record_fix/record_non_code_resolution/correct_target_environment: exact environment in which replay must occur."},"expected_target_environment":{"type":["string","null"],"enum":["local","staging","prod",null],"description":"correct_target_environment only: exact currently recorded target environment used as a stale-state fence."},"operator_reason":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"needs_operator: concrete decision request; close_no_action: bounded rationale for the server-verified closure; correct_fix/supersede_preview/correct_target_environment: explicit operator reason for replacing stale repair metadata; record_non_code_resolution: explicit authorization rationale; reopen_review: explicit operator reason for reopening the legacy reviewed row; reconcile_followup_failure: why the exact later turn is a distinct failed request."},"confirm_fix_correction":{"type":["boolean","null"],"description":"correct_fix only: must be true after explicit operator confirmation of the exact pre-deploy fix correction."},"confirm_preview_supersession":{"type":["boolean","null"],"description":"supersede_preview only: must be true after explicit operator confirmation of the exact unsent preview and replacement fix."},"confirm_target_environment_correction":{"type":["boolean","null"],"description":"correct_target_environment only: must be true after explicit operator confirmation of the exact pre-deploy target correction."},"confirm_reopen":{"type":["boolean","null"],"description":"reopen_review only: must be true after explicit operator selection of the exact feedback row."},"confirm_followup_failure":{"type":["boolean","null"],"description":"reconcile_followup_failure only: must be true after explicit operator confirmation of the exact later failed turn."},"operator_resolution":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"resolve_operator only: bounded operator decision that unblocks the lifecycle."},"close_reason":{"type":["string","null"],"enum":["archived_project","admin_user",null],"description":"close_no_action only: exact reason returned by context.no_action_close_eligibility."},"confirm_close_no_action":{"type":["boolean","null"],"description":"close_no_action only: must be true after explicit operator authorization of the matching standing policy."},"duplicate_of_feedback_id":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"close_duplicate only: exact completed canonical feedback UUID that repaired the same source turn or a server-proven direct retry chain."},"duplicate_reason":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"close_duplicate only: bounded operator-approved reason for closing without another message or credit grant."},"duplicate_linkage_mode":{"type":["string","null"],"enum":["exact_source_turn","direct_retry_chain",null],"default":"exact_source_turn","description":"close_duplicate only: defaults to exact source-turn identity; direct_retry_chain is the explicitly confirmed, server-proven Retry-this-search exception."},"confirm_retry_chain_duplicate":{"type":["boolean","null"],"description":"close_duplicate direct_retry_chain only: must be true after explicit operator confirmation; it cannot substitute for server-side durable proof."},"deployed_commit_sha":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{40}$","description":"run_judge/complete_validation: exact deployed image commit previously reconciled by the server."},"candidate_response":{"type":["string","null"],"minLength":1,"maxLength":32000,"description":"run_judge and passing complete_validation: exact proposed in-conversation Carl message."},"judge":{"type":["object","null"],"properties":{"policy":{"type":"string","enum":["conversation_repair_v1"]},"verdict":{"type":"string","enum":["pass","fail"]},"model":{"type":"string"},"reasoning_effort":{"type":"string","enum":["none","minimal","low","medium","high","xhigh"]},"score":{"type":"number","minimum":0,"maximum":1},"reasons":{"type":"array","items":{"type":"string"}},"context_hash":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"candidate_response_hash":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}},"description":"Legacy complete_validation compatibility field. Passing validation is accepted only when it matches the persisted server-owned run_judge receipt."},"validation":{"type":["object","null"],"properties":{"version":{"type":"string","enum":["conversation_repair_deterministic_v1"]},"deterministic_checks_passed":{"type":"boolean"},"result_kind":{"type":["string","null"],"enum":["rows","response",null],"description":"Required for every new run_judge: rows for a repaired response containing displayed result rows, otherwise response."},"grounded_result_count":{"type":["integer","null"],"minimum":0,"maximum":200,"description":"Exact verified result rows displayed in a row-returning repaired response. Required for result_kind=rows; null or omitted for result_kind=response. Never use total matches or infer it from candidate prose."},"grounded_result_hashes":{"type":["array","null"],"maxItems":200,"uniqueItems":true,"items":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"description":"For result_kind=rows, one unique SHA-256 receipt per displayed row over canonical stable evidence: returned entity/result ID, source lineage, and qualifying-evidence IDs, never rendered candidate prose. Array length must exactly equal grounded_result_count. Null, omitted, or empty for result_kind=response."},"gates":{"type":"object","properties":{"intended_path_ran":{"type":"boolean"},"original_failure_absent":{"type":"boolean"},"grounded_results_valid":{"type":"boolean"},"lineage_valid":{"type":"boolean"},"hard_criteria_preserved":{"type":"boolean"},"no_unsupported_completion_claim":{"type":"boolean"},"no_unsupported_exhaustion_claim":{"type":"boolean"}},"additionalProperties":false},"evidence_hashes":{"type":"object","properties":{"execution":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"grounding":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"lineage":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"},"criteria":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}},"additionalProperties":false},"failure_reason":{"type":"string","maxLength":2000}},"description":"run_judge/complete_validation: versioned deterministic gates, explicit result kind, displayed-row count/receipts for rows, and SHA-256 evidence receipts. The server cross-checks monitor outcome shape, derives a bounded source-request excerpt, and signs concise-email metadata into the judge receipt."},"validation_environment":{"type":["string","null"],"enum":["local","staging","prod",null],"description":"run_judge/complete_validation: environment used for replay; must match recorded target and reconciled deployment."},"context_hash":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{64}$","description":"run_judge/complete_validation: server-computed durable context hash returned by the claimed context call."},"context_last_message_id":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"run_judge/complete_validation: exact last durable message id returned with context_hash."},"validation_failure_reason":{"type":["string","null"],"minLength":1,"maxLength":2000,"description":"complete_validation failed-replay only: bounded reason for the deterministic replay failure."},"delivery_resolution":{"type":["string","null"],"enum":["confirm_delivered","confirm_not_delivered_retry","close_without_retry",null],"description":"resolve_delivery_hold only: explicit operator disposition for the server-owned in-flight channel."},"delivery_evidence":{"type":["string","null"],"minLength":1,"maxLength":8000,"description":"resolve_delivery_hold only: exact bounded provider/audit evidence supporting the disposition."},"confirm_delivery_resolution":{"type":["boolean","null"],"description":"resolve_delivery_hold only: must be true after explicit operator judgment."}},"required":["action"],"additionalProperties":false}},{"name":"admin_feedback_review","title":"Admin: Feedback review claim","description":"Admin-only, audited coordination for one feedback item. Atomically checks and claims an available review, lets the same authenticated reviewer rotate an abandoned session token, reports a different active reviewer without stealing their lease, renews the caller’s token-fenced claim, or releases it.","scope":"admin_metrics","annotations":{"title":"Admin: Feedback review claim","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["status","claim","release"],"description":"Inspect state, atomically acquire/renew a review claim, or release the caller-owned claim."},"feedback_id":{"type":"string","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Exact feedback UUID from the consolidated admin feedback view or feedback packet."},"claim_token":{"type":["string","null"],"pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Null to acquire or rotate a same-reviewer claim; use the server-returned UUID to renew, inspect ownership, or release."}},"required":["action","feedback_id","claim_token"],"additionalProperties":false}},{"name":"admin_metrics_catalog","title":"Admin: Metrics catalog","description":"Admin-only catalog of supported Super Carl product metrics: definitions, availability, supported grains/dimensions/filters, date presets, and example questions grouped by domain. Check it before admin_metrics_query when unsure which metric ids exist. Domain \"ads\" lists the admin_ads_read/admin_ads_write Meta ads actions (detail: names|summary|full).","scope":"admin_metrics","annotations":{"title":"Admin: Metrics catalog","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"domain":{"type":"string","enum":["users","activity","connections","searches","integrations","acquisition","paid_acquisition","subscriptions","outreach","credits","openai","feedback","ads","all"],"description":"Metric domain to list, \"ads\" for the admin_ads_read/admin_ads_write action listing, or \"all\" for everything."},"detail":{"type":"string","enum":["names","summary","full"],"description":"Ads-domain detail level (default \"summary\"; \"full\" adds per-action arg schemas). Ignored for metric domains."}},"required":["domain"],"additionalProperties":false}},{"name":"admin_metrics_query","title":"Admin: Metrics query","description":"Admin-only Super Carl product metrics: users/activity, searches, MCP integrations, organic invite acquisition, paid acquisition, subscriptions, outreach, credits, feedback. Pass a natural-language question, or structured fields (metrics, date_range, grain, dimensions, filters, having, percentiles); pass the prior resolved_request for follow-ups. Metric taxonomy: admin_metrics_catalog.","scope":"admin_metrics","annotations":{"title":"Admin: Metrics query","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"question":{"type":"string","description":"The admin's metrics question, verbatim; planned automatically when `metrics` is absent."},"metrics":{"type":"array","items":{"type":"string"},"description":"Exact metric ids from admin_metrics_catalog (e.g. \"searches.total\"); skips the planner."},"date_range":{"type":"object","description":"Either { preset } or { start, end } (YYYY-MM-DD, end inclusive).","properties":{"preset":{"type":"string","enum":["today","yesterday","this_week","last_7_days","last_30_days","last_90_days","month_to_date"]},"start":{"type":"string"},"end":{"type":"string"}},"additionalProperties":false},"timezone":{"type":"string","description":"IANA timezone (default America/Los_Angeles)."},"grain":{"type":"string","enum":["day","week","month"],"description":"Time-series bucket. Mutually exclusive with dimensions."},"dimensions":{"type":"array","items":{"type":"string","enum":["surface","campaign","source","link","post","landing_page","model","product_action","token_feature","billing_scope","tier","source_channel","signup_cohort_week","first_search_surface","primary_search_surface_7d"]},"description":"At most one breakdown dimension. Mutually exclusive with grain."},"filters":{"type":"object","description":"Either the object form (audience/include_subsearches/dimension_equals/email_domain/exclude_user_emails; audience external excludes known admin/internal/test accounts, all opts them in; email_domain is exact canonical-email domain scope) or a filter tree { op: \"and\"|\"or\", clauses: [{ field, op: \"eq\"|\"in\"|\"contains\", value }] }.","properties":{"audience":{"type":"string","enum":["external","all"]},"include_subsearches":{"type":"boolean"},"email_domain":{"type":"string","description":"Exact normalized domain of users.email (for example \"example.com\"); aggregate-only and available only on user-keyed metrics."},"exclude_user_emails":{"type":"array","maxItems":500,"items":{"type":"string"},"description":"Optional canonical users.email addresses to exclude from email_domain; requires email_domain and remains aggregate-only."},"dimension_equals":{"type":"object","description":"Restrict a dimension to one value, e.g. {\"campaign\":\"spring_launch\"}. When dimensions is set, the key MUST be that same dimension — a key naming any other dimension is rejected (filter_requires_matching_breakdown), because it cannot be executed against a breakdown. To filter by one dimension while breaking down by another (e.g. paying users by signup cohort), there is currently no supported request; ask for the filtered total or a grain series instead, which do honor dimension_equals.","additionalProperties":{"type":"string"}},"op":{"type":"string","enum":["and","or"]},"clauses":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"op":{"type":"string","enum":["eq","in","contains"]},"value":{"description":"String for eq/contains; array of strings for in."}},"additionalProperties":false}}},"additionalProperties":false},"having":{"type":"array","description":"Post-aggregation breakdown row filters, e.g. campaigns with spend but no signups. Requires dimensions.","items":{"type":"object","properties":{"metric":{"type":"string","description":"One of the requested metric ids."},"op":{"type":"string","enum":[">",">=","<","<=","="]},"value":{"type":"number"}},"additionalProperties":false}},"percentiles":{"type":"array","items":{"type":"integer","minimum":1,"maximum":99},"description":"Percentiles (1-99) for distribution metrics such as searches.per_user_distribution; not valid with grain or dimensions."},"comparison":{"type":"object","properties":{"type":{"type":"string","enum":["prior_period"]}},"additionalProperties":false},"order_by":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"dir":{"type":"string","enum":["asc","desc"]}},"additionalProperties":false}},"limit":{"type":"number","minimum":1,"maximum":100,"description":"Breakdown row cap."},"output":{"type":"object","properties":{"format":{"type":"string","enum":["answer","table","series"]},"include_baseline":{"type":"boolean"}},"additionalProperties":false},"prior_request":{"type":"object","description":"The previous answer's resolved_request; follow-up fields patch-merge on top.","additionalProperties":true}},"additionalProperties":false}},{"name":"admin_metrics_render","title":"Admin: Metrics chart","description":"Admin-only: render a saved admin metrics view (view_id) or an inline metric/report/cohort/ordered-journey spec (persisted as a new view) into a chart image. Returns image_url (admin-authorized), admin_view_url (interactive custom view), alt_text, and expires_at. Build specs with admin_metrics_query/admin_metrics_catalog first.","scope":"admin_metrics","annotations":{"title":"Admin: Metrics chart","readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"question":{"type":"string","description":"Optional natural-language chart request, verbatim. When spec is absent, the server planner creates a safe metric, cohort, report, or journey_path request."},"prior_request":{"type":"object","description":"Previous admin_metrics_query/admin_metrics_report resolved_request; follow-up chart requests patch-merge against it.","additionalProperties":true},"title":{"type":"string","description":"Optional saved-view title. A title inside spec is also accepted."},"view_id":{"type":"string","description":"Existing saved view id (UUID) to render. Omit when passing spec."},"spec":{"type":"object","description":"An AdminMetricRequest, a previous admin_metrics_query result with resolved_request, a cohort or journey_path spec from admin_metrics_report, or report spec { sections: [{ title?, request }] }. May carry a top-level title. Creates a saved view.","additionalProperties":true},"viewport":{"type":"object","description":"Image size in px (default 1200x700).","properties":{"width":{"type":"integer","minimum":320,"maximum":4096},"height":{"type":"integer","minimum":320,"maximum":4096}},"additionalProperties":false}},"additionalProperties":false}},{"name":"admin_metrics_report","title":"Admin: Metrics reports and diagnoses","description":"Admin-only Super Carl metrics investigations: multi-section reports, \"why did X change?\" diagnosis, ordered user journeys, funnel, arbitrary-day retention/free-to-paid cohorts, campaign/source comparisons, and feedback themes. This tool is read-only. Pass mode + params or a question. Taxonomy: admin_metrics_catalog.","scope":"admin_metrics","annotations":{"title":"Admin: Metrics reports and diagnoses","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"question":{"type":"string","description":"Admin's question, verbatim; planner routes it if mode absent."},"mode":{"type":"string","enum":["report","diagnose","funnel","journey_path","cohort","compare","feedback_insights"]},"sections":{"type":"array","description":"report: <=6 sections of { title?, request: <metric_query args> }.","items":{"type":"object","properties":{"title":{"type":"string"},"request":{"type":"object","additionalProperties":true}},"additionalProperties":true}},"metric_id":{"type":"string","description":"diagnose: metric id."},"baseline_period":{"type":"object","description":"diagnose: baseline window.","properties":{"preset":{"type":"string"},"start":{"type":"string"},"end":{"type":"string"}},"additionalProperties":false},"decompose_by":{"type":"array","items":{"type":"string"},"description":"diagnose: dimension ids."},"top_n":{"type":"integer","minimum":1,"maximum":50,"description":"diagnose: default 10."},"funnel_id":{"type":"string","description":"Default 'activation'."},"anchor_event":{"type":"string","description":"journey_path: canonical anchor event; default 'landing.session_started'."},"direction":{"type":"string","enum":["after","before","both"],"description":"journey_path: traverse after, before, or around the anchor."},"before_steps":{"type":"integer","minimum":0,"maximum":6,"description":"journey_path: ordered steps before anchor; default 0/3 by direction."},"after_steps":{"type":"integer","minimum":0,"maximum":6,"description":"journey_path: ordered steps after anchor; default 4/0 by direction."},"observation_days":{"type":"integer","minimum":1,"maximum":90,"description":"journey_path: cross-session observation window; default 30."},"session_scope":{"type":"string","enum":["cross_session","same_session"],"description":"journey_path: follow a person across sessions or constrain to one session."},"include_events":{"type":"array","maxItems":50,"items":{"type":"string"},"description":"journey_path: canonical events allowed in displayed paths."},"exclude_events":{"type":"array","maxItems":50,"items":{"type":"string"},"description":"journey_path: canonical events omitted from displayed paths."},"min_count":{"type":"integer","minimum":1,"maximum":100,"description":"journey_path: minimum subjects per visible path; default 1."},"audience":{"type":"string","enum":["external","all"],"description":"journey_path/cohort: external excludes admin/internal/test accounts by default; all explicitly includes them."},"acquisition":{"type":"string","enum":["all","paid","organic"],"description":"journey_path: acquisition scope."},"traffic_source":{"type":"string","description":"journey_path: landing traffic source filter."},"campaign_id":{"type":"string","description":"journey_path: landing campaign id filter."},"device_type":{"type":"string","description":"journey_path: landing device type filter."},"page_variant":{"type":"string","description":"journey_path: landing variant filter."},"page_revision_hash":{"type":"string","description":"journey_path: landing revision filter."},"page_surface":{"type":"string","maxLength":64,"description":"journey_path: public entry surface such as homepage, public_seo, public_join, or public_schedule."},"entry_entity_type":{"type":"string","maxLength":32,"description":"journey_path: public entry entity type, for example user, company, job, post, or landing_page."},"entry_entity_id":{"type":"string","maxLength":256,"description":"journey_path: stable public entry entity id."},"entry_entity_slug":{"type":"string","maxLength":256,"description":"journey_path: public profile username or entity slug."},"entry_link_type":{"type":"string","maxLength":32,"description":"journey_path: entry link context such as generic, invite, or opportunity."},"entry_link_id":{"type":"string","format":"uuid","maxLength":64,"description":"journey_path: stable internal invite or assignment-target UUID; never pass a raw short/context code."},"user_id":{"type":"string","format":"uuid","description":"journey_path: exact Super Carl user UUID. Never pass an email or name."},"segment_by":{"type":"string","description":"funnel: cohort_week|first_search_surface|primary_search_surface_7d; cohort retention: paid_status|tier; cohort free_to_paid: ceiling_hit|source (surface/MCP segments are planned and return not_yet_available)."},"cohort_defn":{"type":"string","enum":["signup_week","signup_day","pooled","first_paid_week","first_paid_day"],"description":"Default signup_week. pooled combines eligible retention cohorts across the full date range before per-horizon privacy suppression. first_paid_week/first_paid_day anchor each user on their FIRST PAID GRANT instead of signup, which is the right cohort for paid retention: monetization began 2026-02-03, so under a signup anchor no 2025 signup cohort can contain a payer at a short horizon and those cells are arithmetically empty rather than broken. Paid cohorts remain small (about 67 contract payers), so the minimum cohort-size floor still suppresses many cells."},"return_metric":{"type":"string","enum":["retention","free_to_paid"],"description":"Default retention."},"horizons":{"type":"array","maxItems":20,"items":{"type":"integer","minimum":1,"maximum":365},"description":"cohort: retention accepts arbitrary days 1-365 (e.g. 7/14/21/28); free_to_paid supports 7/14/30."},"paid_status_basis":{"type":"string","enum":["signup_day","as_of_horizon"],"description":"retention + paid_status only: signup_day (default fixed cohort) or as_of_horizon (reclassify each horizon cell)."},"condition":{"type":"string","description":"cohort planned: first_positive_search_within_1d; returns not_yet_available until the pre-outcome anchor is implemented."},"metric":{"type":"string","description":"compare: metric id."},"group_by":{"type":"string","description":"compare: 'campaign' or 'source'."},"min_sample":{"type":"integer","minimum":1,"description":"compare: default 20."},"signal_type":{"type":"string"},"signal_tool_name":{"type":"string"},"reviewed":{"type":"boolean"},"response_status":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":300,"description":"Default 200."},"theme_count":{"type":"integer","minimum":1,"maximum":12,"description":"Default 6."},"include_examples":{"type":"boolean","description":"Default true."},"date_range":{"type":"object","description":"Analysis window for every live mode (end inclusive).","properties":{"preset":{"type":"string","enum":["today","yesterday","this_week","last_7_days","last_30_days","last_90_days","month_to_date"]},"start":{"type":"string"},"end":{"type":"string"}},"additionalProperties":false},"timezone":{"type":"string","description":"Default America/Los_Angeles."},"prior_request":{"type":"object","description":"Prior resolved_request; follow-ups patch-merge.","additionalProperties":true}},"additionalProperties":false}},{"name":"admin_metrics_schedule","title":"Admin: Metrics report schedules","description":"Admin-only scheduled metric digest management. List your schedules, create a daily/weekly digest or threshold alert for your own Slack DM/account email, or delete a schedule. This tool changes saved schedule state and may configure future delivery.","scope":"admin_metrics","annotations":{"title":"Admin: Metrics report schedules","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true},"parameters":{"type":"object","required":["mode"],"properties":{"mode":{"type":"string","enum":["schedule_list","schedule_create","schedule_delete"]},"view_id":{"type":"string","description":"schedule_create/delete: saved view id (creator only)."},"spec":{"type":"object","description":"Request or { sections } to save as a new view (alt to view_id).","additionalProperties":true},"schedule":{"type":"object","description":"Presets only; weekday required for weekly; no cron.","properties":{"frequency":{"type":"string","enum":["daily","weekly"]},"at":{"type":"string","description":"24h 'HH:MM'."},"timezone":{"type":"string"},"weekday":{"type":"string","enum":["sunday","monday","tuesday","wednesday","thursday","friday","saturday"]}},"additionalProperties":false},"deliver_to":{"type":"object","description":"ALWAYS your own Slack DM/account email; no other recipients.","properties":{"channels":{"type":"array","items":{"type":"string","enum":["slack_dm","email"]}}},"additionalProperties":false},"alert_condition":{"type":"object","description":"Deliver only when met; metric = a scalar metric id in the spec.","properties":{"metric":{"type":"string"},"op":{"type":"string","enum":[">",">=","<","<=","="]},"threshold":{"type":"number"}},"additionalProperties":false}},"additionalProperties":false}},{"name":"admin_trigger_config","title":"Admin: Trigger configuration","description":"Admin-only CRUD for Super Carl notification triggers. Use to list, create, pause, resume, or delete Slack notification rules such as sending new user feedback to a Slack channel. Separates admin triggers from end-user personal triggers.","scope":"admin_metrics","annotations":{"title":"Admin: Trigger configuration","readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false},"parameters":{"type":"object","properties":{"action":{"type":"string","enum":["create","list","pause","resume","delete"],"description":"CRUD action to perform."},"scope":{"type":["string","null"],"enum":["admin","end_user",null],"description":"Trigger scope. Use admin for product/operator notifications; end_user for personal notifications."},"event_type":{"type":["string","null"],"enum":["feedback.created","user.created","subscription.created","message.created","watch.digest.ready",null],"description":"Stable event key. feedback.created is the currently delivered Slack admin trigger."},"trigger_id":{"type":["string","null"],"description":"Existing trigger id for pause, resume, or delete."},"destination":{"type":["string","null"],"enum":["current_slack_channel","slack_channel",null],"description":"Use current_slack_channel when creating from the channel that should receive notifications."},"workspace_id":{"type":["string","null"],"description":"Slack workspace id. Usually inferred from the current Slack origin."},"workspace_name":{"type":["string","null"],"description":"Optional Slack workspace display name."},"channel_id":{"type":["string","null"],"description":"Slack channel id for a slack_channel destination."},"channel_name":{"type":["string","null"],"description":"Slack channel name such as #triage. Resolved through Slack when channel_id is omitted."},"name":{"type":["string","null"],"description":"Optional trigger display name."},"include_admin_feedback":{"type":["boolean","null"],"description":"Deprecated compatibility field. feedback.created always includes admin-authored feedback."}},"required":["action","scope","event_type","trigger_id","destination","workspace_id","workspace_name","channel_id","channel_name","name","include_admin_feedback"],"additionalProperties":false}},{"name":"admin_usage_leaderboard","title":"Admin: Usage leaderboard (row-level)","description":"Admin-only, separately gated and audited MCP usage leaderboard for pricing/support work. Returns an exact external-user count and, in top_users mode, at most 25 users ranked by completed top-level searches or immutable credits in a <=93-day window. email_domain scopes to one customer domain (enterprise account reviews: up to 100 rows, zero-usage users included). Exact >/>= thresholds are supported; name/email require explicit opt-in and justification.","scope":"admin_metrics","annotations":{"title":"Admin: Usage leaderboard (row-level)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"mode":{"type":"string","enum":["count","top_users"],"description":"count returns only the exact matching-user count; top_users also returns a bounded ranking. Defaults to top_users."},"rank_by":{"type":"string","enum":["searches","credits"],"description":"searches = completed top-level searches; credits = immutable credits used."},"date_range":{"type":"object","description":"Window (default month_to_date), limited to 93 days. Custom end dates are inclusive.","properties":{"preset":{"type":"string","enum":["today","yesterday","this_week","last_7_days","last_30_days","last_90_days","month_to_date"]},"start":{"type":"string","description":"Custom start date/instant."},"end":{"type":"string","description":"Custom inclusive end date/instant."}},"additionalProperties":false},"timezone":{"type":"string","description":"IANA timezone (default America/Los_Angeles)."},"email_domain":{"type":"string","description":"Scope to users whose account email is on this exact bare domain (e.g. daversapartners.com) for enterprise/account reviews. Includes zero-usage users by default (threshold >= 0) and raises the limit cap to 100."},"threshold_operator":{"type":"string","enum":[">",">="],"description":"Exact comparator applied to rank_by. Defaults to > globally, >= when email_domain is set."},"threshold_value":{"type":"number","minimum":0,"description":"Exact per-user usage threshold. Defaults to 0 for an unrestricted top-user ranking."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Maximum users returned in top_users mode. Global: default 10, max 25. With email_domain: default and max 100."},"include_contact_details":{"type":"boolean","description":"Explicit opt-in to include name/email in top_users mode. Defaults false."},"justification":{"type":"string","minLength":10,"description":"Required pricing/support justification (>= 10 chars); redacted in the row-level audit log."}},"required":["rank_by","justification"],"additionalProperties":false}},{"name":"admin_user_inspect","title":"Admin: User inspection (row-level)","description":"Admin-only row-level support inspection; separately audited; requires justification. Returns one user's diagnostic card by id or email: activity, last searches (incl. sensitive query_text), 30d searching-session count/duration, outreach summary, 30d OpenAI token/cost usage, 30d credits, subscription tier, and activation funnel position. For aggregate questions use admin_metrics_query instead.","scope":"admin_metrics","annotations":{"title":"Admin: User inspection (row-level)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"parameters":{"type":"object","properties":{"user_ref":{"type":"string","description":"Target user: id (UUID) or email address."},"include":{"type":"array","items":{"type":"string","enum":["activity","searches","search_sessions","openai_usage","outreach","credits","subscription","funnel_position"]},"description":"Sections to return; omit for all sections."},"justification":{"type":"string","minLength":10,"description":"REQUIRED support justification (>= 10 chars), e.g. the ticket or the admin's stated reason; stored redacted in the row-level audit log."}},"required":["user_ref","justification"],"additionalProperties":false}}]}