{"server":{"name":"scryu","canonicalUrl":"https://staging-agents.scryu.com/mcp","codeModeUrl":"https://staging-agents.scryu.com/mcp/code","operationsUrl":"https://staging-agents.scryu.com/mcp/ops","operationsCodeModeUrl":"https://staging-agents.scryu.com/mcp/ops/code","auth":{"type":"oauth","provider":"WorkOS AuthKit"}},"tools":[{"name":"list_assigned_outreach","title":"List assigned outreach","description":"List and deterministically page outreach assigned to the authenticated admitted operator. Canonical order is the immutable outreach work-item order key ascending; readiness, status, and updated time are returned or filterable but never change order. Supports campaign, lifecycle/readiness, status, and text filters. Returns one stable campaign-person outreach identity with every current assigned channel and variation; it never exposes another operator's work.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1},"status_scope":{"type":"string","enum":["open","sent","all"]},"work_filter":{"type":"string","enum":["open_work","ready_mine","needs_owner","needs_contact","needs_draft","ready_to_send","blocked","sent","follow_up"]},"search_query":{"type":"string","minLength":1},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"outreach":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"is_done":{"type":"boolean"},"continue_cursor":{"type":"string"}},"required":["outreach","is_done","continue_cursor"],"additionalProperties":{}},"exposure":"workspace"},{"name":"read_outreach","title":"Read assigned outreach","description":"Read one assigned outreach item with person and campaign context, every assigned channel and variation, exact editable copy, blockers, prior-touch summary, exact prepared identity/snapshot, an honest first page of immutable accepted send evidence with has_more/continue_cursor, and structured native-launch values. Continue complete evidence history with list_outreach_send_evidence. Evidence is assignment-scoped and contains no controlling-client secrets. Returns no complete native URL and authorizes no send.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1}},"required":["assignment_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"outreach":{"type":"object","properties":{},"additionalProperties":{}}},"required":["outreach"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_outreach_send_evidence","title":"List accepted outreach send evidence","description":"Cursor-page the complete immutable accepted send-evidence audit for one assigned outreach channel. The cursor is bound to the authenticated operator and assignment. Returns provider-neutral proof identities and exact prepared snapshots without raw confirmations, tokens, or operator evidence.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["assignment_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"evidence":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"is_done":{"type":"boolean"},"continue_cursor":{"type":"string"}},"required":["evidence","is_done","continue_cursor"],"additionalProperties":{}},"exposure":"workspace"},{"name":"prepare_outreach","title":"Prepare exact outreach launch","description":"Prepare the exact current draft revision or saved recipient override for immediate native launch through the canonical preparation contract. Gmail issues an exact attempt-bound correlation BCC only here and returns structured To, Subject, Body, BCC, and expected-account metadata; clients construct the native URL locally. LinkedIn remains copy/open only with no field automation, state inspection, or Send. This does not authorize or record a send.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1},"draft_revision_id":{"type":"string","minLength":1},"recipient_override_revision_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["assignment_id","draft_revision_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prepared":{"type":"object","properties":{"assignment":{"type":"object","properties":{},"additionalProperties":{}},"prepared_snapshot":{"type":"object","properties":{},"additionalProperties":{}},"launch":{"anyOf":[{"type":"object","properties":{"surface":{"type":"string","const":"gmail_compose"},"ready":{"type":"boolean","const":true},"values":{"type":"object","properties":{"to":{"type":"string"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"tracking_bcc":{"type":"object","properties":{"required":{"type":"boolean","const":true},"correlation_address":{"type":"string"},"status":{"type":"string","const":"issued_for_exact_prepared_attempt"}},"required":["required","correlation_address","status"],"additionalProperties":false}},"required":["to","subject","body","tracking_bcc"],"additionalProperties":false},"operational":{"type":"object","properties":{"provider":{"type":"string","const":"gmail"},"expected_mailbox":{"type":"string"},"expected_account":{"type":"string"},"client_constructs_native_url":{"type":"boolean","const":true},"manual_mode_default":{"type":"boolean","const":true}},"required":["provider","expected_mailbox","expected_account","client_constructs_native_url","manual_mode_default"],"additionalProperties":false},"stop_before":{"type":"string","const":"send"}},"required":["surface","ready","values","operational","stop_before"],"additionalProperties":false},{"type":"object","properties":{"surface":{"type":"string","enum":["linkedin_message","linkedin_invitation"]}},"required":["surface"],"additionalProperties":{}}]}},"required":["assignment","prepared_snapshot","launch"],"additionalProperties":{}}},"required":["prepared"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_gmail_agent_send_preference","title":"Get Gmail agent send preference","description":"Read the authenticated operator's current Gmail-only agent-send preference and immutable audit/revocation history. Manual Gmail remains available and is the default. A preference is never action-time send authorization.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"preference":{"type":"object","properties":{},"additionalProperties":{}},"history":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"required":["preference","history"],"additionalProperties":{}},"exposure":"workspace"},{"name":"set_gmail_agent_send_preference","title":"Set Gmail agent send preference","description":"Enable or revoke the authenticated operator's durable Gmail-only agent-send preference with immutable audit history. Enabling requires confirmation ENABLE_GMAIL_AGENT_SEND; revoking requires REVOKE_GMAIL_AGENT_SEND. This preference alone never authorizes a send.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"type":"boolean"},"confirmation":{"type":"string"},"reason":{"type":"string","minLength":1}},"required":["enabled","confirmation"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"preference":{"type":"object","properties":{},"additionalProperties":{}}},"required":["preference"],"additionalProperties":{}},"exposure":"workspace"},{"name":"mark_outreach_sent","title":"Explicitly mark outreach sent","description":"Explicitly record observed native-send success through the canonical sent-state contract. Opening or filling a composer is never proof. Manual evidence requires CONFIRM_NATIVE_SEND_OBSERVED. Agent-confirmed evidence is Gmail-only and additionally requires the exact current enabled preference revision plus CONFIRM_GMAIL_AGENT_SEND_AFTER_OBSERVED_SUCCESS. LinkedIn field automation, state inspection, and Send are prohibited.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1},"outreach_attempt_id":{"type":"string","minLength":1},"draft_revision_id":{"type":"string","minLength":1},"recipient_override_revision_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"expected_state_version":{"type":"integer","minimum":0,"maximum":9007199254740991},"evidence_id":{"type":"string","minLength":1},"send_proof_source":{"type":"string","enum":["manual","agent_confirmed"]},"subject_snapshot":{"anyOf":[{"type":"string"},{"type":"null"}]},"body_snapshot":{"anyOf":[{"type":"string"},{"type":"null"}]},"note_snapshot":{"anyOf":[{"type":"string"},{"type":"null"}]},"native_send_observed":{"type":"boolean","const":true},"action_time_confirmation":{"type":"string"},"preference_revision_id":{"type":"string","minLength":1},"operator_evidence":{"type":"string","minLength":12}},"required":["assignment_id","outreach_attempt_id","draft_revision_id","expected_state_version","evidence_id","send_proof_source","subject_snapshot","body_snapshot","note_snapshot","native_send_observed","action_time_confirmation","operator_evidence"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"result":{"type":"object","properties":{},"additionalProperties":{}},"outreach":{"type":"object","properties":{},"additionalProperties":{}}},"required":["result","outreach"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_outreach_recipient_override","title":"Get outreach recipient override","description":"Read the exact current per-recipient outreach override, persisted conflict, and stale state for one assignment. Authorization is enforced against the assigned operator.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1}},"required":["assignment_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"override_state":{"type":"object","properties":{},"additionalProperties":{}}},"required":["override_state"],"additionalProperties":{}},"exposure":"workspace"},{"name":"edit_outreach_recipient_override","title":"Edit outreach recipient override","description":"Create a new immutable recipient override revision for an assigned deterministic outreach message. Requires exact base campaign/draft identity and optimistic-concurrency identity; returns an explicit persisted conflict instead of overwriting concurrent work. Read back with get_outreach_recipient_override.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1},"base_campaign_revision":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"deterministic_draft_revision_id":{"type":"string","minLength":1},"expected_override_revision_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"expected_concurrency_token":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"anyOf":[{"type":"string"},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["assignment_id","base_campaign_revision","deterministic_draft_revision_id","expected_override_revision_id","expected_concurrency_token"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"result":{"type":"object","properties":{},"additionalProperties":{}},"override_state":{"type":"object","properties":{},"additionalProperties":{}}},"required":["result","override_state"],"additionalProperties":{}},"exposure":"workspace"},{"name":"create_search","title":"Discover new people or companies","description":"Use only to discover new people or companies outside the current SCRYU records. Do not use this method to retrieve, filter, count, or summarize records already saved in SCRYU. This provider-neutral discovery path may create or enrich canonical records through search/reconcile work. People searches require a structured person name and accept optional company, title, location, and profile URL hints; they execute exact-person discovery. Company and mixed searches require query. Omitted count defaults to 10 for those modes. It does not expose raw provider knobs.","group":"searches","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"label":{"type":"string","minLength":1},"query":{"type":"string","minLength":1},"count":{"type":"integer","minimum":1,"maximum":100},"target_mode":{"type":"string","enum":["people_and_companies","people","companies"]},"person":{"type":"object","properties":{"name":{"type":"string","minLength":1},"company":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"location":{"type":"string","minLength":1},"profile_url":{"type":"string","format":"uri"}},"required":["name"],"additionalProperties":false}},"required":["label"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"search":{"type":"object","properties":{"search_id":{"type":"string"},"family_key":{"anyOf":[{"type":"string"},{"type":"null"}]},"execution_kind":{"type":"string","enum":["discovery","exact_person"]},"exact_person_request":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"exact_person_outcome":{"anyOf":[{"type":"string","enum":["matched","not_found","ambiguous","conflict","provider_error"]},{"type":"null"}]},"label":{"type":"string"},"query":{"type":"string"},"requested_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"target_mode":{"type":"string","enum":["people_and_companies","people","companies"]},"status":{"type":"string"},"display_status":{"type":"string"},"person_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"company_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"match_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"evidence_reference_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"effect_summary":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"last_activity_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"last_event_label":{"type":"string"},"processing_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"started_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["search_id","label","query","target_mode","status","person_count","company_count","match_count","created_at","completed_at"],"additionalProperties":{}}},"required":["search"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_searches","title":"List searches","description":"List recent SCRYU search runs with target mode, lifecycle status, result counts, and latest activity. Read-only.","group":"searches","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"searches":{"type":"array","items":{"type":"object","properties":{"search_id":{"type":"string"},"family_key":{"anyOf":[{"type":"string"},{"type":"null"}]},"execution_kind":{"type":"string","enum":["discovery","exact_person"]},"exact_person_request":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"exact_person_outcome":{"anyOf":[{"type":"string","enum":["matched","not_found","ambiguous","conflict","provider_error"]},{"type":"null"}]},"label":{"type":"string"},"query":{"type":"string"},"requested_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"target_mode":{"type":"string","enum":["people_and_companies","people","companies"]},"status":{"type":"string"},"display_status":{"type":"string"},"person_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"company_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"match_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"evidence_reference_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"effect_summary":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"last_activity_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"last_event_label":{"type":"string"},"processing_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"started_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["search_id","label","query","target_mode","status","person_count","company_count","match_count","created_at","completed_at"],"additionalProperties":{}}}},"required":["searches"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_search","title":"Get search","description":"Load the structured detail readback for a SCRYU search run, including target mode, status, people, companies, matches, activity, and summary counts. Read-only.","group":"searches","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"search_id":{"type":"string","minLength":1},"match_cursor":{"type":"string","minLength":1}},"required":["search_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"search":{"type":"object","properties":{"search_id":{"type":"string"},"family_key":{"anyOf":[{"type":"string"},{"type":"null"}]},"execution_kind":{"type":"string","enum":["discovery","exact_person"]},"exact_person_request":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"exact_person_outcome":{"anyOf":[{"type":"string","enum":["matched","not_found","ambiguous","conflict","provider_error"]},{"type":"null"}]},"label":{"type":"string"},"query":{"type":"string"},"requested_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"target_mode":{"type":"string","enum":["people_and_companies","people","companies"]},"status":{"type":"string"},"display_status":{"type":"string"},"last_activity_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"last_event_label":{"type":"string"},"processing_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"started_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"people":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"companies":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"matches":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"activity":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"summary":{"type":"object","properties":{"match_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"evaluation_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"evidence_reference_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"page":{"type":"object","properties":{"match_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"person_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"company_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"effect_summary":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"coverage":{"type":"object","properties":{"people":{"type":"object","properties":{"rich":{"type":"integer","minimum":0,"maximum":9007199254740991},"partial":{"type":"integer","minimum":0,"maximum":9007199254740991},"skeleton":{"type":"integer","minimum":0,"maximum":9007199254740991},"needs_refresh":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rich","partial","skeleton","needs_refresh"],"additionalProperties":{}},"companies":{"type":"object","properties":{"rich":{"type":"integer","minimum":0,"maximum":9007199254740991},"partial":{"type":"integer","minimum":0,"maximum":9007199254740991},"skeleton":{"type":"integer","minimum":0,"maximum":9007199254740991},"needs_refresh":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rich","partial","skeleton","needs_refresh"],"additionalProperties":{}}},"required":["people","companies"],"additionalProperties":{}}},"required":["match_count","person_count","company_count","effect_summary","coverage"],"additionalProperties":{}},"company_refresh":{"type":"object","properties":{"requested_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"requested":{"type":"integer","minimum":0,"maximum":9007199254740991},"refreshed":{"type":"integer","minimum":0,"maximum":9007199254740991},"failed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["requested_at","completed_at","requested","refreshed","failed"],"additionalProperties":{}},"person_refresh":{"type":"object","properties":{"requested_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"requested":{"type":"integer","minimum":0,"maximum":9007199254740991},"refreshed":{"type":"integer","minimum":0,"maximum":9007199254740991},"failed":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["requested_at","completed_at","requested","refreshed","failed"],"additionalProperties":{}},"last_activity_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"last_event_label":{"type":"string"},"processing_error":{"anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"type":"object","properties":{"matches":{"type":"boolean"},"people":{"type":"boolean"},"companies":{"type":"boolean"}},"required":["matches","people","companies"],"additionalProperties":{}}},"required":["match_count","evaluation_count","evidence_reference_count","page","company_refresh","person_refresh","truncated"],"additionalProperties":{}}},"required":["search_id","label","query","target_mode","status","created_at","completed_at","people","companies","matches","summary"],"additionalProperties":{}}},"required":["search"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_match_evaluations","title":"List match evaluations","description":"Cursor-page every criterion evaluation for one SCRYU match. Use when a match detail reports evaluations.unavailable or evaluations.hasMore. Read-only.","group":"searches","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"match_id":{"type":"string","minLength":1},"cursor":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":50}},"required":["match_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"evaluations":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["evaluations"],"additionalProperties":false},"exposure":"workspace"},{"name":"list_match_evidence_references","title":"List match evidence references","description":"Cursor-page every match-level and evaluation-level evidence reference for one SCRYU match. evaluationId is null for match-level evidence. Read-only.","group":"searches","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"match_id":{"type":"string","minLength":1},"cursor":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":100}},"required":["match_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"evidence_references":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["evidence_references"],"additionalProperties":false},"exposure":"workspace"},{"name":"find_and_save_companies","title":"Find and save companies","description":"Intake or enrich one or more company records from a clean canonical anchor. This is a write path, not an existing-record lookup method. Pass existing_company_id to enrich a specific saved company instead of creating a new root. Use the company name, official domain, or official URL. Do not include ranking text or descriptive blurbs in the anchor.","group":"companies","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"existing_company_id":{"type":"string","minLength":1},"anchor":{"type":"string","minLength":1},"notes":{"type":"string","minLength":1},"max_matches":{"type":"integer","minimum":1,"maximum":25},"hints":{"type":"object","properties":{"domain":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"linkedin_url":{"type":"string","minLength":1}},"additionalProperties":false},"estimated_provider_cost_cap_dollars":{"description":"Estimated cap, in US dollars, on this company intake's web research calls. Requires hints or existing_company_id. Research stops and no company is saved once the next call's estimated cost would pass the cap, or a call reports no cost or more than its estimate. A call can cost more than its estimate, so this is not a hard ceiling. Identity adjudication is not covered. Every call is recorded in provider_spend.","type":"number","exclusiveMinimum":0,"maximum":1}},"required":["anchor"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intake_id":{"type":"string"},"status":{"type":"string"},"trace_id":{"type":"string"},"records":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"issues":{"type":"array","items":{}},"receipt":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["intake_id","status","records","issues","receipt"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_identity_intake","title":"Get identity intake","description":"Read one durable identity acquisition or decision intake after caller loss. Candidate readback is bounded and reports candidates_truncated.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intake_id":{"type":"string","minLength":1},"candidate_limit":{"type":"integer","minimum":1,"maximum":100}},"required":["intake_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intake":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["intake"],"additionalProperties":false},"exposure":"workspace"},{"name":"find_and_save_company_batch","title":"Find and save company batch","description":"Find and save up to 100 company anchors through the same duplicate-aware company save path. Repeated deterministic anchors in the same batch are skipped before provider/backend work. Use for backlog intake after you have clean anchors/domains/URLs; pass existing_company_id per item when enriching a known record.","group":"companies","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"existing_company_id":{"type":"string","minLength":1},"anchor":{"type":"string","minLength":1},"notes":{"type":"string","minLength":1},"max_matches":{"type":"integer","minimum":1,"maximum":25},"hints":{"type":"object","properties":{"domain":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"linkedin_url":{"type":"string","minLength":1}},"additionalProperties":false},"estimated_provider_cost_cap_dollars":{"description":"Estimated cap, in US dollars, on this company intake's web research calls. Requires hints or existing_company_id. Research stops and no company is saved once the next call's estimated cost would pass the cap, or a call reports no cost or more than its estimate. A call can cost more than its estimate, so this is not a hard ceiling. Identity adjudication is not covered. Every call is recorded in provider_spend.","type":"number","exclusiveMinimum":0,"maximum":1}},"required":["anchor"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"completed"},"results":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"summary":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["status","results","summary"],"additionalProperties":{}},"exposure":"workspace"},{"name":"plan_company_batch","title":"Plan company batch","description":"Preflight up to 100 company anchors against current Convex companies without provider work or writes. Returns duplicate, save, enrich-existing, ambiguous, and identity-required buckets for agent/operator review before intake.","group":"companies","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"existing_company_id":{"type":"string","minLength":1},"anchor":{"type":"string","minLength":1},"notes":{"type":"string","minLength":1},"max_matches":{"type":"integer","minimum":1,"maximum":25},"hints":{"type":"object","properties":{"domain":{"type":"string","minLength":1},"url":{"type":"string","minLength":1},"linkedin_url":{"type":"string","minLength":1}},"additionalProperties":false},"estimated_provider_cost_cap_dollars":{"description":"Estimated cap, in US dollars, on this company intake's web research calls. Requires hints or existing_company_id. Research stops and no company is saved once the next call's estimated cost would pass the cap, or a call reports no cost or more than its estimate. A call can cost more than its estimate, so this is not a hard ceiling. Identity adjudication is not covered. Every call is recorded in provider_spend.","type":"number","exclusiveMinimum":0,"maximum":1}},"required":["anchor"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"planned"},"items":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"summary":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["status","items","summary"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_companies","title":"Find and filter existing saved companies","description":"Find, list, and filter existing saved SCRYU companies by text or active tag. Read-only. Resolve tag labels with list_company_tags, then pass tag_id. Combined tag_id and search_query use intersection semantics. Keep every filter unchanged when passing continue_cursor as cursor. Wait for is_done before claiming a complete cohort or exact count. An incomplete page never authorizes net-new discovery.","group":"companies","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","minLength":1,"description":"Opaque continue_cursor returned by a previous page."},"search_query":{"type":"string","minLength":1,"description":"Substring terms for filtering existing saved company rows. Untagged searches use the full-text index; combined tag_id and search_query use substring intersection semantics."},"tag_id":{"type":"string","minLength":1,"description":"Active company tag_id from list_company_tags. Returns only existing companies assigned that tag."}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companies":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"is_done":{"type":"boolean"},"continue_cursor":{"type":"string"},"incomplete":{"type":"boolean"},"incomplete_reason":{"anyOf":[{"type":"string","enum":["bounded_read_split","work_bound_reached"]},{"type":"null"}]}},"required":["companies","is_done","continue_cursor","incomplete","incomplete_reason"],"additionalProperties":false},"exposure":"workspace"},{"name":"get_company","title":"Get company","description":"Load the current company detail view from SCRYU.","group":"companies","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company_id":{"type":"string","minLength":1},"match_cursor":{"type":"string","minLength":1}},"required":["company_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["company"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_company_tags","title":"List company tags","description":"List active company tags. Use a returned tag_id to filter existing saved companies with list_companies or to assign that existing tag with add_company_tag. Read-only. New custom tags must be created in the UI, not through MCP/API.","group":"companies","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tags":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"required":["tags"],"additionalProperties":{}},"exposure":"workspace"},{"name":"add_company_tag","title":"Add company tag","description":"Assign an existing company tag to an existing SCRYU company. Use list_company_tags first if you do not already know the tag_id. This tool cannot create custom tags. Call get_company to read back the company state after writing.","group":"companies","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company_id":{"type":"string","minLength":1},"tag_id":{"type":"string","minLength":1,"description":"Existing company tag_id from list_company_tags or get_company. This tool cannot create tags."}},"required":["company_id","tag_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"tag":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"assigned":{"type":"boolean"}},"required":["tag","assigned"],"additionalProperties":{}},"exposure":"workspace"},{"name":"remove_company_tag","title":"Remove company tag","description":"Remove an existing company tag assignment from a company. Call get_company to read back the company state after writing.","group":"companies","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company_id":{"type":"string","minLength":1},"tag_id":{"type":"string","minLength":1,"description":"Existing company tag_id from list_company_tags or get_company. This tool cannot create tags."}},"required":["company_id","tag_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"removed":{"type":"boolean"}},"required":["removed"],"additionalProperties":{}},"exposure":"workspace"},{"name":"find_and_save_people","title":"Find and save people","description":"Find and save one or more plausible people from a clean canonical anchor. Pass a durable profile_url whenever possible. Passing existing_company_id gates/attaches employer identity after candidate discovery; it is not a provider-level company-scoped same-name search. Use deep_find_person for inspect-only exact-person fallback when profile identity is missing.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"existing_company_id":{"type":"string","minLength":1},"anchor":{"type":"string","minLength":1},"notes":{"type":"string","minLength":1},"max_matches":{"type":"integer","minimum":1,"maximum":10},"hints":{"type":"object","properties":{"profile_url":{"type":"string","minLength":1},"company":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"location":{"type":"string","minLength":1}},"additionalProperties":false}},"required":["anchor"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"intake_id":{"type":"string"},"status":{"type":"string"},"trace_id":{"type":"string"},"records":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"issues":{"type":"array","items":{}},"receipt":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["intake_id","status","records","issues","receipt"],"additionalProperties":{}},"exposure":"workspace"},{"name":"deep_find_person","title":"Deep find person","description":"Inspect public evidence for one exact person through the shared SCRYU search-agent find_person contract. This is the preferred high-volume fallback for exact-person lookup when find_and_save_people lacks a durable profile URL. It returns one intended person result or an abstention, does not create search runs, never writes SCRYU canonical people/contact records, and hides provider internals.","group":"people","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1},"company":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"email":{"type":"string","minLength":1},"profile_url":{"type":"string","minLength":1},"source_context":{"type":"string","minLength":1},"location":{"type":"string","minLength":1}},"required":["name"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"outcome":{"type":"string","enum":["verified_exact_person","ambiguous","not_found","wrong_input_profile"]},"trace_id":{"type":"string"},"exact_match":{"type":"boolean"},"confidence":{"type":"string","enum":["high","medium","low","none"]},"matched_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"matched_company":{"anyOf":[{"type":"string"},{"type":"null"}]},"matched_title":{"anyOf":[{"type":"string"},{"type":"null"}]},"profile_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"identity_evidence_urls":{"type":"array","items":{"type":"string"}},"employer_evidence_urls":{"type":"array","items":{"type":"string"}},"contact_evidence":{"type":"array","items":{"type":"object","properties":{"source_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"confidence":{"type":"string","enum":["high","medium","low","none"]},"summary":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string","enum":["email","phone","linkedin","other"]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["source_url","confidence","summary","kind","value"],"additionalProperties":{}}},"abstention_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string"},{"type":"null"}]},"search_summary":{"anyOf":[{"type":"string"},{"type":"null"}]},"canonical_write_occurred":{"type":"boolean","const":false}},"required":["outcome","trace_id","exact_match","confidence","matched_name","matched_company","matched_title","profile_url","identity_evidence_urls","employer_evidence_urls","contact_evidence","abstention_reason","notes","search_summary","canonical_write_occurred"],"additionalProperties":{}},"exposure":"workspace"},{"name":"refresh_person","title":"Refresh person","description":"Queue durable rehydration for one existing SCRYU person by person_id. Uses the current source profile URL unless profile_url is provided; refuses unsafe name-only refreshes and returns the observable refresh request.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person_id":{"type":"string","minLength":1},"profile_url":{"type":"string","minLength":1}},"required":["person_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"refresh_id":{"type":"string"},"person_id":{"type":"string"},"status":{"type":"string","enum":["queued","running","completed","failed"]},"outcome":{"anyOf":[{"type":"string","enum":["improved","no_change","needs_review","failed"]},{"type":"null"}]},"contact_ready":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"email_gap":{"anyOf":[{"type":"string"},{"type":"null"}]},"email_receipt":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"changed_fields":{"type":"array","items":{"type":"string"}},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"requested_at":{"type":"number"},"started_at":{"anyOf":[{"type":"number"},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["refresh_id","person_id","status","outcome","contact_ready","email_gap","email_receipt","changed_fields","error","requested_at","started_at","completed_at"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_person_refresh","title":"Get person refresh","description":"Read the durable queued, running, completed, or failed state for a refresh_id returned by refresh_person.","group":"people","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"refresh_id":{"type":"string","minLength":1}},"required":["refresh_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"refresh_id":{"type":"string"},"person_id":{"type":"string"},"status":{"type":"string","enum":["queued","running","completed","failed"]},"outcome":{"anyOf":[{"type":"string","enum":["improved","no_change","needs_review","failed"]},{"type":"null"}]},"contact_ready":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"email_gap":{"anyOf":[{"type":"string"},{"type":"null"}]},"email_receipt":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"changed_fields":{"type":"array","items":{"type":"string"}},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"requested_at":{"type":"number"},"started_at":{"anyOf":[{"type":"number"},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["refresh_id","person_id","status","outcome","contact_ready","email_gap","email_receipt","changed_fields","error","requested_at","started_at","completed_at"],"additionalProperties":{}},"exposure":"workspace"},{"name":"set_person_contact_info","title":"Set person contact info","description":"Set one existing SCRYU person's primary email address and optional primary phone number, then read back and return the updated person detail. source_reference_id is optional attribution for where the contact value came from, for example an event list, catalog, CRM export, research note, or import batch; omit it when unknown.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person_id":{"type":"string","minLength":1,"description":"Existing SCRYU person_id to update."},"email_address":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"Known email address to store as this person's primary email."},"phone_number":{"type":"string","description":"Optional known phone number to store as this person's primary phone."},"source":{"type":"string","enum":["manual","import"],"description":"Contact source. Omit for normal manual writes; defaults to manual."},"source_reference_id":{"type":"string","minLength":1,"maxLength":512,"description":"Optional attribution for where the contact value came from. Pass a readable event list, catalog, CRM export, research note, or import batch reference when known; omit when unknown. This is not the MCP/API consumer identity."}},"required":["person_id","email_address"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["person"],"additionalProperties":{}},"exposure":"workspace"},{"name":"plan_person_title_correction","title":"Plan person title correction","description":"Review a bounded correction to one existing person's canonical current title before writing. Requires a durable reason and 1-10 HTTPS evidence URLs. Returns a revision bound to the exact request and current person state. Read-only.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person_id":{"type":"string","minLength":1},"current_title":{"type":"string","minLength":1,"maxLength":300},"reason":{"type":"string","minLength":1,"maxLength":4000},"evidence_urls":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","format":"uri","pattern":"^https:\\/\\/.*"}}},"required":["person_id","current_title","reason","evidence_urls"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["plan"],"additionalProperties":false},"exposure":"workspace"},{"name":"apply_person_title_correction","title":"Apply person title correction","description":"Apply one reviewed person current-title correction with the exact revision, reason, title, and evidence URLs from plan_person_title_correction. Returns a durable receipt and reads the person back. Stale state is refused with zero writes.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person_id":{"type":"string","minLength":1},"current_title":{"type":"string","minLength":1,"maxLength":300},"reason":{"type":"string","minLength":1,"maxLength":4000},"evidence_urls":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","format":"uri","pattern":"^https:\\/\\/.*"}},"expected_revision":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["person_id","current_title","reason","evidence_urls","expected_revision"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"receipt":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"person":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]}},"required":["receipt","person"],"additionalProperties":false},"exposure":"workspace"},{"name":"get_person_title_correction_receipt","title":"Get person title correction receipt","description":"Read one durable person title-correction receipt by receipt_id. Read-only.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"receipt_id":{"type":"string","minLength":1}},"required":["receipt_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"receipt":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["receipt"],"additionalProperties":false},"exposure":"workspace"},{"name":"plan_person_import","title":"Plan provider-free person import","description":"Review up to 20 known people from one sheet of a source file (for example workbook rows with a profile URL, email, and existing company_id) before importing them without any provider call. A source row is identified by source_sha256, source_sheet, and source_row. Each row gets a planned action (create, update, no_change, already_imported, or hold with a hold_code). Holds cover employer, email, profile, name, duplicate, and company identity conflicts. Returns a revision bound to the exact rows and current records. Read-only.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source_sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","description":"Hex SHA-256 of the exact source file the rows were read from. Recorded as provenance on every receipt, email, and employment claim."},"source_sheet":{"type":"string","maxLength":200,"description":"Exact name of the one sheet or table in the source file that source_row numbers refer to, for example the workbook tab name; it is not trimmed or normalized. Rows from different sheets go in separate requests."},"rows":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"source_row":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1-based row number in the source file."},"first_name":{"type":"string","maxLength":200},"last_name":{"type":"string","maxLength":200},"email":{"type":"string","maxLength":300},"profile_url":{"type":"string","maxLength":2048,"description":"The row's person profile URL, such as a LinkedIn /in/ URL."},"company_id":{"type":"string","minLength":1,"maxLength":300,"description":"Existing SCRYU company_id the row is expected to belong to."},"company_name":{"type":"string","minLength":1,"maxLength":300},"company_website":{"type":"string","maxLength":2048},"company_linkedin_url":{"type":"string","maxLength":2048},"title":{"type":"string","maxLength":300}},"required":["source_row","first_name","last_name","profile_url","company_id","company_name"],"additionalProperties":false}}},"required":["source_sha256","source_sheet","rows"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"plan":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["plan"],"additionalProperties":false},"exposure":"workspace"},{"name":"apply_person_import","title":"Apply provider-free person import","description":"Apply one reviewed plan_person_import revision with identical rows. Makes no provider call. Emails are saved as unverified import contacts, becoming primary only when no usable email exists. New current employments carry an explicit unverified import claim. Existing canonical values are never overwritten, and held rows write only a receipt. Writes no outreach, campaign, or tag records. Returns one durable receipt with readback per row. A stale revision is refused with zero writes, and replaying the same revision returns the original receipts.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source_sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","description":"Hex SHA-256 of the exact source file the rows were read from. Recorded as provenance on every receipt, email, and employment claim."},"source_sheet":{"type":"string","maxLength":200,"description":"Exact name of the one sheet or table in the source file that source_row numbers refer to, for example the workbook tab name; it is not trimmed or normalized. Rows from different sheets go in separate requests."},"rows":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"source_row":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"1-based row number in the source file."},"first_name":{"type":"string","maxLength":200},"last_name":{"type":"string","maxLength":200},"email":{"type":"string","maxLength":300},"profile_url":{"type":"string","maxLength":2048,"description":"The row's person profile URL, such as a LinkedIn /in/ URL."},"company_id":{"type":"string","minLength":1,"maxLength":300,"description":"Existing SCRYU company_id the row is expected to belong to."},"company_name":{"type":"string","minLength":1,"maxLength":300},"company_website":{"type":"string","maxLength":2048},"company_linkedin_url":{"type":"string","maxLength":2048},"title":{"type":"string","maxLength":300}},"required":["source_row","first_name","last_name","profile_url","company_id","company_name"],"additionalProperties":false}},"expected_revision":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["source_sha256","source_sheet","rows","expected_revision"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"result":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["result"],"additionalProperties":false},"exposure":"workspace"},{"name":"get_person_import_receipts","title":"Get person import receipts","description":"Read the latest provider-free person import receipt for up to 100 source rows of one sheet (source_sheet) of one source file (source_sha256). Rows without a receipt return not_imported. Read-only.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source_sha256":{"type":"string","pattern":"^[0-9a-fA-F]{64}$","description":"Hex SHA-256 of the exact source file the rows were read from. Recorded as provenance on every receipt, email, and employment claim."},"source_sheet":{"type":"string","maxLength":200,"description":"Exact name of the one sheet or table in the source file that source_row numbers refer to, for example the workbook tab name; it is not trimmed or normalized. Rows from different sheets go in separate requests."},"source_rows":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"integer","minimum":1,"maximum":9007199254740991}}},"required":["source_sha256","source_sheet","source_rows"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"receipts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["receipts"],"additionalProperties":false},"exposure":"workspace"},{"name":"list_people","title":"List people","description":"List current SCRYU people read-model rows as a cursor page for inspection before cleanup, enrichment, reconciliation, or opportunity work. Pass continue_cursor from one response as cursor to retrieve the next page. Read-only.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":100},"cursor":{"type":"string","minLength":1,"description":"Opaque continue_cursor returned by a previous page."}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"people":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"is_done":{"type":"boolean"},"continue_cursor":{"type":"string"}},"required":["people","is_done","continue_cursor"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_person","title":"Get person","description":"Load the current person detail view from SCRYU.","group":"people","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person_id":{"type":"string","minLength":1},"match_cursor":{"type":"string","minLength":1}},"required":["person_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["person"],"additionalProperties":{}},"exposure":"workspace"},{"name":"list_opportunities","title":"List opportunities","description":"List SCRYU opportunities in a pipeline or queue-shaped view with filters for stage, status, owner, company, health, staleness, due state, and text.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"stage":{"type":"string","enum":["qualification","scoping","contracting"]},"outcome":{"type":"string","enum":["sold","lost"]},"owner_operator_user_id":{"type":"string","minLength":1},"company_id":{"type":"string","minLength":1},"health":{"type":"string","enum":["on_track","needs_attention","blocked","stale","unknown"]},"stale_only":{"type":"boolean"},"due":{"type":"string","enum":["overdue","upcoming"]},"query":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":250}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunities":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"required":["opportunities"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_opportunity","title":"Get opportunity","description":"Load the full SCRYU opportunity detail read model: company, people, requirements, tasks, notes, activity, signals, and coverage.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunity"],"additionalProperties":{}},"exposure":"workspace"},{"name":"create_opportunity","title":"Create opportunity","description":"Create a SCRYU opportunity linked to an existing company, with optional source records, spend estimate, next action, and initial note.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company_id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"summary":{"type":"string","minLength":1},"stage":{"type":"string","enum":["qualification","scoping","contracting"]},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"health":{"type":"string","enum":["on_track","needs_attention","blocked","stale","unknown"]},"owner_operator_user_id":{"type":"string","minLength":1},"primary_contact_person_id":{"type":"string","minLength":1},"source_search_ids":{"type":"array","items":{"type":"string","minLength":1}},"estimated_spend":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0},"currency":{"type":"string","const":"USD"},"period":{"type":"string","enum":["one_time","monthly","annual"]},"confidence":{"type":"string","enum":["low","medium","high"]},"basis":{"type":"string","minLength":1},"source_note_ids":{"type":"array","items":{"type":"string","minLength":1}}},"required":["confidence","basis"],"additionalProperties":false},"target_close_date":{"type":"integer","minimum":0,"maximum":9007199254740991},"next_action":{"type":"string","minLength":1},"next_action_due_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"initial_note":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":160},"body_markdown":{"type":"string","minLength":1,"maxLength":65536},"tags":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"source_urls":{"maxItems":20,"type":"array","items":{"type":"string","format":"uri"}},"related_note_ids":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}}},"required":["title","body_markdown"],"additionalProperties":false}},"required":["company_id","name"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"receipts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunity","receipts"],"additionalProperties":{}},"exposure":"workspace"},{"name":"update_opportunity","title":"Update opportunity","description":"Patch core SCRYU opportunity fields. Use move_opportunity_stage for explicit stage transitions.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"summary":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"health":{"type":"string","enum":["on_track","needs_attention","blocked","stale","unknown"]},"owner_operator_user_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"primary_contact_person_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"estimated_spend":{"anyOf":[{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0},"currency":{"type":"string","const":"USD"},"period":{"type":"string","enum":["one_time","monthly","annual"]},"confidence":{"type":"string","enum":["low","medium","high"]},"basis":{"type":"string","minLength":1},"source_note_ids":{"type":"array","items":{"type":"string","minLength":1}}},"required":["confidence","basis"],"additionalProperties":false},{"type":"null"}]},"booked_value":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"target_close_date":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"next_action":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"next_action_due_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"updated":{"type":"array","items":{"type":"string"}}},"required":["opportunity_id","updated"],"additionalProperties":{}},"exposure":"workspace"},{"name":"move_opportunity_stage","title":"Move opportunity stage","description":"Move an open SCRYU opportunity between Qualification, Scoping, and Contracting.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"stage":{"type":"string","enum":["qualification","scoping","contracting"]},"note":{"type":"string","minLength":1}},"required":["opportunity_id","stage"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"stage":{"type":"string","enum":["qualification","scoping","contracting"]}},"required":["opportunity_id","stage"],"additionalProperties":{}},"exposure":"workspace"},{"name":"archive_opportunity","title":"Remove opportunity","description":"Remove a SCRYU opportunity from the active pipeline without recording a sold or lost outcome. Maps to the archived lifecycle; the row stays readable on its detail page.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"note":{"type":"string","minLength":1}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"stage":{"type":"string","enum":["qualification","scoping","contracting"]},"archived_at":{"type":"number","minimum":0},"previous_updated_at":{"type":"number","minimum":0},"updated_at":{"type":"number","minimum":0}},"required":["opportunity_id","stage","archived_at","previous_updated_at","updated_at"],"additionalProperties":{}},"exposure":"workspace"},{"name":"complete_opportunity","title":"Complete opportunity","description":"Complete an opportunity with a terminal Sold or Lost outcome. Lost requires loss_reason. Sold creates or links one active engagement; Lost never does.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"outcome":{"type":"string","enum":["sold","lost"]},"booked_value":{"type":"number","minimum":0},"loss_reason":{"type":"string","minLength":1},"note":{"type":"string","minLength":1}},"required":["opportunity_id","outcome"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"outcome":{"type":"string","enum":["sold","lost"]},"completion_stage":{"type":"string","enum":["qualification","scoping","contracting"]},"loss_reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"active_engagement_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"booked_value":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["opportunity_id","outcome","completion_stage","loss_reason","active_engagement_id","booked_value"],"additionalProperties":{}},"exposure":"workspace"},{"name":"add_opportunity_context","title":"Add opportunity context","description":"Append opportunity context: note, spend basis, next action, requirements, tasks, and discovered people. Writes are explicit and receipt-backed.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"note":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":160},"body_markdown":{"type":"string","minLength":1,"maxLength":65536},"tags":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"source_urls":{"maxItems":20,"type":"array","items":{"type":"string","format":"uri"}},"related_note_ids":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1}}},"required":["title","body_markdown"],"additionalProperties":false},"estimated_spend":{"type":"object","properties":{"min":{"type":"number","minimum":0},"max":{"type":"number","minimum":0},"currency":{"type":"string","const":"USD"},"period":{"type":"string","enum":["one_time","monthly","annual"]},"confidence":{"type":"string","enum":["low","medium","high"]},"basis":{"type":"string","minLength":1},"source_note_ids":{"type":"array","items":{"type":"string","minLength":1}}},"required":["confidence","basis"],"additionalProperties":false},"next_action":{"type":"string","minLength":1},"next_action_due_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"requirements":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["technical","security","legal","procurement","commercial","staffing","implementation","data","success_criteria","other"]},"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"status":{"type":"string","enum":["open","in_progress","blocked","satisfied","dismissed"]},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"owner_operator_user_id":{"type":"string","minLength":1},"due_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"source_note_ids":{"type":"array","items":{"type":"string","minLength":1}}},"required":["category","title"],"additionalProperties":false}},"tasks":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"status":{"type":"string","enum":["open","in_progress","blocked","completed","dismissed"]},"assignee_operator_user_id":{"type":"string","minLength":1},"due_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["title"],"additionalProperties":false}},"people":{"type":"array","items":{"type":"object","properties":{"person_id":{"type":"string","minLength":1},"role":{"type":"string","enum":["primary_buyer","economic_buyer","champion","technical_evaluator","security","legal","procurement","blocker","advisor","stakeholder","unknown","owner","supporting_operator","technical_owner","delivery_owner","executive_sponsor"]},"relationship_status":{"type":"string","enum":["unknown","active","supportive","neutral","blocked"]},"notes":{"type":"string","minLength":1},"is_primary":{"type":"boolean"}},"required":["person_id","role"],"additionalProperties":false}}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"}},"additionalProperties":{}},"exposure":"workspace"},{"name":"list_opportunity_tasks","title":"List opportunity tasks","description":"List opportunity task queues for one opportunity, optionally filtered by status.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"status":{"type":"string","enum":["open","in_progress","blocked","completed","dismissed"]},"cursor":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":250}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"task_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["open","in_progress","blocked","completed","dismissed"]},"assignee_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"due_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"created_by_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_requirement_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_signal_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["task_id","opportunity_id","title","description","status","assignee_operator_user_id","due_at","completed_at","created_by_operator_user_id","source_requirement_id","source_signal_id","created_at","updated_at"],"additionalProperties":false}},"continue_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"has_more":{"type":"boolean"},"truncated":{"type":"boolean"}},"required":["items","continue_cursor","has_more","truncated"],"additionalProperties":false},"exposure":"workspace"},{"name":"upsert_opportunity_task","title":"Upsert opportunity task","description":"Create or update a due-date action for an opportunity.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"task_id":{"type":"string","minLength":1},"title":{"type":"string","minLength":1},"description":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"status":{"type":"string","enum":["open","in_progress","blocked","completed","dismissed"]},"assignee_operator_user_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"due_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"source_requirement_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"source_signal_id":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["opportunity_id","title"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"task":{"type":"object","properties":{"task_id":{"type":"string"},"opportunity_id":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["open","in_progress","blocked","completed","dismissed"]},"assignee_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"due_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"completed_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"created_by_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_requirement_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_signal_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["task_id","opportunity_id","title","description","status","assignee_operator_user_id","due_at","completed_at","created_by_operator_user_id","source_requirement_id","source_signal_id","created_at","updated_at"],"additionalProperties":false}},"required":["task"],"additionalProperties":false},"exposure":"workspace"},{"name":"complete_opportunity_task","title":"Complete opportunity task","description":"Complete an opportunity task with an optional completion note.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"task_id":{"type":"string","minLength":1},"note":{"type":"string","minLength":1}},"required":["opportunity_id","task_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"task_id":{"type":"string"},"note_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["opportunity_id","task_id","note_id"],"additionalProperties":false},"exposure":"workspace"},{"name":"list_active_engagement_deliverables","title":"List active engagement deliverables","description":"List a bounded page of delivery commitments in stable creation order.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"engagement_id":{"type":"string","minLength":1},"cursor":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":50,"description":"a number less than or equal to 50"}},"required":["engagement_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"deliverable_id":{"type":"string"},"engagement_id":{"type":"string"},"title":{"type":"string","minLength":1,"maxLength":240,"description":"a string at most 240 character(s) long"},"description":{"anyOf":[{"type":"string","maxLength":8192,"description":"a string at most 8192 character(s) long"},{"type":"null"}]},"workstream":{"anyOf":[{"type":"string","maxLength":120,"description":"a string at most 120 character(s) long"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"status":{"type":"string","enum":["planned","in_progress","delivered"]},"delivered_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"created_by_operator_user_id":{"type":"string"},"updated_by_operator_user_id":{"type":"string"},"delivered_by_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["deliverable_id","engagement_id","title","description","workstream","start_date","end_date","status","delivered_at","created_by_operator_user_id","updated_by_operator_user_id","delivered_by_operator_user_id","created_at","updated_at"],"additionalProperties":false}},"continue_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"has_more":{"type":"boolean"},"truncated":{"type":"boolean"}},"required":["items","continue_cursor","has_more","truncated"],"additionalProperties":false},"exposure":"workspace"},{"name":"upsert_active_engagement_deliverable","title":"Upsert active engagement deliverable","description":"Create or edit a planned or in-progress delivery commitment.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"engagement_id":{"type":"string","minLength":1},"deliverable_id":{"type":"string","minLength":1},"title":{"type":"string","description":"a string that will be trimmed"},"description":{"anyOf":[{"type":"string","maxLength":8192,"description":"a string at most 8192 character(s) long"},{"type":"null"}]},"workstream":{"anyOf":[{"type":"string","maxLength":120,"description":"a string at most 120 character(s) long"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"status":{"type":"string","enum":["planned","in_progress"]}},"required":["engagement_id","title"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliverable":{"type":"object","properties":{"deliverable_id":{"type":"string"},"engagement_id":{"type":"string"},"title":{"type":"string","minLength":1,"maxLength":240,"description":"a string at most 240 character(s) long"},"description":{"anyOf":[{"type":"string","maxLength":8192,"description":"a string at most 8192 character(s) long"},{"type":"null"}]},"workstream":{"anyOf":[{"type":"string","maxLength":120,"description":"a string at most 120 character(s) long"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"status":{"type":"string","enum":["planned","in_progress","delivered"]},"delivered_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"created_by_operator_user_id":{"type":"string"},"updated_by_operator_user_id":{"type":"string"},"delivered_by_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["deliverable_id","engagement_id","title","description","workstream","start_date","end_date","status","delivered_at","created_by_operator_user_id","updated_by_operator_user_id","delivered_by_operator_user_id","created_at","updated_at"],"additionalProperties":false},"receipt":{"type":"object","properties":{"engagement_id":{"type":"string"},"deliverable_id":{"type":"string"},"created":{"type":"boolean"},"idempotent":{"type":"boolean"}},"required":["engagement_id","deliverable_id","created","idempotent"],"additionalProperties":false}},"required":["deliverable","receipt"],"additionalProperties":false},"exposure":"workspace"},{"name":"mark_active_engagement_deliverable_delivered","title":"Mark active engagement deliverable delivered","description":"Idempotently enter the terminal Delivered lifecycle state.","group":"opportunities","annotations":{},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"engagement_id":{"type":"string","minLength":1},"deliverable_id":{"type":"string","minLength":1}},"required":["engagement_id","deliverable_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"deliverable":{"type":"object","properties":{"deliverable_id":{"type":"string"},"engagement_id":{"type":"string"},"title":{"type":"string","minLength":1,"maxLength":240,"description":"a string at most 240 character(s) long"},"description":{"anyOf":[{"type":"string","maxLength":8192,"description":"a string at most 8192 character(s) long"},{"type":"null"}]},"workstream":{"anyOf":[{"type":"string","maxLength":120,"description":"a string at most 120 character(s) long"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string","pattern":"^(\\d{4})-(\\d{2})-(\\d{2})$","description":"A real calendar date in canonical YYYY-MM-DD format."},{"type":"null"}]},"status":{"type":"string","enum":["planned","in_progress","delivered"]},"delivered_at":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"created_by_operator_user_id":{"type":"string"},"updated_by_operator_user_id":{"type":"string"},"delivered_by_operator_user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["deliverable_id","engagement_id","title","description","workstream","start_date","end_date","status","delivered_at","created_by_operator_user_id","updated_by_operator_user_id","delivered_by_operator_user_id","created_at","updated_at"],"additionalProperties":false},"receipt":{"type":"object","properties":{"engagement_id":{"type":"string"},"deliverable_id":{"type":"string"},"created":{"type":"boolean"},"idempotent":{"type":"boolean"}},"required":["engagement_id","deliverable_id","created","idempotent"],"additionalProperties":false}},"required":["deliverable","receipt"],"additionalProperties":false},"exposure":"workspace"},{"name":"scope_opportunity","title":"Scope opportunity","description":"Return deterministic scoping guidance for an opportunity: missing roles, requirements, risks, spend basis, and suggested next actions.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string"},"required_roles":{"type":"array","items":{"type":"string"}},"required_needs":{"type":"array","items":{"type":"string"}},"risks":{"type":"array","items":{}},"missing_information":{"type":"array","items":{}},"spend_basis":{"anyOf":[{"type":"string"},{"type":"null"}]},"suggested_next_actions":{"type":"array","items":{}},"coverage":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["opportunity_id","required_roles","required_needs","risks","missing_information","suggested_next_actions","coverage"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_opportunity_activity","title":"Get opportunity activity","description":"Load recent opportunity timeline activity for one opportunity or the workspace queue.","group":"opportunities","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"opportunity_id":{"type":"string","minLength":1},"limit":{"type":"integer","minimum":1,"maximum":250}},"required":["opportunity_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"activity":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"required":["activity"],"additionalProperties":{}},"exposure":"workspace"},{"name":"prepare_campaign_audience","title":"Prepare a complete saved-person campaign audience","description":"Start or resume an idempotent reviewed audience from ALL saved people at current employers with a company tag. Choose any (no email required, including LinkedIn-only people), selectable email (verified/unverified/stale, no deliverability promise), or verified-only. Email sending eligibility is checked separately. Target an existing targeted campaign or supply a new campaign name/prompt. No campaign or membership writes occur before explicit apply. Call advance_campaign_audience until ready, review counts and list_campaign_audience_items, then apply the exact review token. After reviewed apply, enrollment automatically creates drafts using saved campaign settings; generated campaigns may incur model costs. No messages are sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"idempotency_key":{"type":"string","minLength":1,"maxLength":200},"company_tag_id":{"type":"string","minLength":1,"maxLength":200},"email_policy":{"type":"string","enum":["any","selectable","verified"]},"target":{"anyOf":[{"type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200}},"required":["campaign_id"],"additionalProperties":false},{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"generation_prompt":{"type":"string","minLength":1,"maxLength":10000}},"required":["name","generation_prompt"],"additionalProperties":false}]}},"required":["idempotency_key","company_tag_id","email_policy","target"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"advance_campaign_audience","title":"Advance campaign audience preparation or reviewed assignment","description":"Advance exactly one durable bounded page or batch. Before reviewed apply this only prepares the manifest; afterward it enrolls reviewed people and reconciles persisted membership. Retry safely after interruption. Stop on ready for explicit human review, complete for receipts, or stale for a new review. Existing active members stay active; previewed removed members are restored. Enrollment automatically creates drafts using saved campaign settings; generated campaigns may incur model costs. No messages are sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operation_id":{"type":"string","minLength":1,"maxLength":200}},"required":["operation_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"apply_campaign_audience","title":"Apply the explicitly reviewed campaign audience","description":"Authorize the exact complete reviewed manifest using its review token and APPLY_REVIEWED_AUDIENCE confirmation. Creates a campaign at most once, if requested, and enables bounded enrollment through advance_campaign_audience. Requires review of complete counts, existing/removed membership behavior and preview. Source or target drift requires re-review; never silently expands the cohort. Enrollment automatically creates drafts using saved campaign settings; generated campaigns may incur model costs. No messages are sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operation_id":{"type":"string","minLength":1,"maxLength":200},"review_token":{"type":"string","minLength":1,"maxLength":200},"confirmation":{"type":"string","const":"APPLY_REVIEWED_AUDIENCE"}},"required":["operation_id","review_token","confirmation"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"read_campaign_audience","title":"Read campaign audience progress and receipt","description":"Read the authenticated operator's durable reviewed-audience filters, completeness, cutoff, progress and assignment/reconciliation counts. Stale or partial work is never a complete audience. Read live membership per item through list_campaign_audience_items.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operation_id":{"type":"string","minLength":1,"maxLength":200}},"required":["operation_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"list_campaign_audience_items","title":"Read reviewed audience preview and membership receipts","description":"Read a bounded cursor page of the persisted deduplicated audience: saved-person preview, membership before review, per-item assignment outcome/reason, reconciliation and current persisted active membership. Page until is_done for the entire reviewed cohort.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operation_id":{"type":"string","minLength":1,"maxLength":200},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":25}},"required":["operation_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"find_more_people_at_company","title":"Find more people at this company","description":"Discover and save additional current people at an existing company. Defaults to Palantir owners, senior data/analytics/transformation owners, CIO, CTO and head of product. Bounded to ten candidates with employer checks and duplicate protection. Returns durable progress; candidate discovery is separate from saved-email readiness. Poll get_company_people_discovery.","group":"people","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company_id":{"type":"string","minLength":1,"maxLength":200}},"required":["company_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"discovery_id":{"type":"string"},"status":{"type":"string"}},"required":["discovery_id","status"],"additionalProperties":{}},"exposure":"workspace"},{"name":"get_company_people_discovery","title":"Get company people discovery","description":"Read bounded durable company-scoped discovery progress, actual new people, existing matches, unresolved gaps and saved-email readiness. Completed means processing finished, not contact-ready enrichment success.","group":"people","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"discovery_id":{"type":"string","minLength":1,"maxLength":200}},"required":["discovery_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"discovery_id":{"type":"string"},"status":{"type":"string"}},"required":["discovery_id","status"],"additionalProperties":{}},"exposure":"workspace"},{"name":"assign_outreach","title":"Assign outreach to an operator","description":"Assign one campaign person for a channel and variation. Defaults to the calling admitted operator; an explicit operator must be verified and admitted under the same rules as the app. Outreach policy blocks ineligible people. Creates an assignment and reserved attempt; sends no messages.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200},"channel":{"type":"string","enum":["email","linkedin"]},"variation":{"type":"string","enum":["manual_email","connection_request","inmail_message"]},"operator_user_id":{"type":"string","minLength":1,"maxLength":200},"person_id":{"type":"string","minLength":1,"maxLength":200},"contact_point_id":{"type":"string","minLength":1,"maxLength":200}},"required":["campaign_id","channel","variation","person_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"reassign_outreach","title":"Reassign outreach to an operator","description":"Reassign an existing nonterminal assignment to a verified, admitted operator using the app's authorization rules. Requires an admitted caller. Sends no messages.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1,"maxLength":200},"operator_user_id":{"type":"string","minLength":1,"maxLength":200}},"required":["assignment_id","operator_user_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"take_outreach","title":"Take an outreach assignment","description":"Take an existing nonterminal assignment as the calling admitted operator, using the same authorization and lifecycle checks as the app. Refuses while another operator has it prepared to launch; ask them to finish or cancel, or use reassign_outreach for an explicit hand-over. Sends no messages.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1,"maxLength":200}},"required":["assignment_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"bulk_assign_outreach","title":"Assign selected campaign members to an operator","description":"Assign an explicitly selected set of up to 500 targeted-campaign members, for one channel and variation the campaign enables, to the calling operator or a named admitted operator from list_operators. Processes at most 10 people per call in independent transactions. Each person returns assigned with the new assignment_id, unchanged when that operator already holds it, skipped with reasons, or failed with error. assigned_to_other_operator names the current owner: nothing is ever reassigned, cancelled, prepared or sent here, and reassign_outreach stays the explicit hand-over. Other skips are the same outreach policy as assign_outreach, such as removed membership or active work elsewhere. Continue with continue_cursor as cursor and unchanged campaign_id, person_ids, channel, variation and operator_user_id until is_done; changing any of them invalidates the cursor. Retry is safe, but interruption can leave partial progress. Read owners back with list_campaign_members.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200},"channel":{"type":"string","enum":["email","linkedin"]},"variation":{"type":"string","enum":["manual_email","connection_request","inmail_message"]},"operator_user_id":{"type":"string","minLength":1,"maxLength":200},"person_ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"cursor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":10}},"required":["campaign_id","channel","variation","person_ids"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"bulk_update_campaign_memberships","title":"Remove or restore selected campaign members","description":"Remove or restore an explicitly selected set of targeted-campaign members, the bulk counterpart of the app's per-row Remove and Restore. Changes membership status only: drafts, runs, draft revisions, assignments, attempts and accepted send evidence are never deleted, so a removal is reversible by restoring the same people. Processes at most 10 people per call in independent transactions, returning removed/restored, skipped with reasons (person not a member, or membership already in that state), or failed with error per person; one failure never aborts the rest of the page. Continue with continue_cursor as cursor and unchanged campaign_id, person_ids and operation until is_done; changing the selection invalidates the cursor. Retry is safe because already-applied people are skipped, but interruption can leave partial progress. Restoring re-enrolls exactly as the app does, which requeues automatic drafts for anyone whose drafts are missing or stale for the current campaign revision, so generated campaigns may incur model costs; surviving current drafts are reused. Nothing is sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200},"person_ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"operation":{"type":"string","enum":["remove","restore"]},"cursor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":10}},"required":["campaign_id","person_ids","operation"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"generate_campaign_drafts","title":"Generate or read selected campaign drafts","description":"Generate drafts for explicitly selected campaign people through the same generation path as the app. Generated campaigns use the LLM; deterministic campaigns render exact copy without an LLM. Processes at most 10 people per call, sequentially, with per-person accepted/already_current/already_running/failed outcomes and persisted run IDs/status. Continue using continue_cursor with unchanged campaign, people and operation until is_done. is_done means the selection has been visited, not that asynchronous drafting finished. Retry reuses current/running drafts; no forced regeneration. Each person commits independently, so interruption can leave partial progress. Use operation read with a fresh cursor to poll the latest run and current draft revisions for each selected person, including failed/stale results, without writing or starting generation. Readback is live latest state, not a frozen run snapshot. Nothing is sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200},"person_ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"operation":{"type":"string","enum":["generate","read"]},"cursor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":10}},"required":["campaign_id","person_ids","operation"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"set_outreach_contact","title":"Set an outreach assignment contact","description":"Set or repair the contact for a nonterminal outreach assignment through the app's canonical assignment-contact mutation. The assignment determines the contact kind (email or LinkedIn); the contact is manual and unverified. Preserves app authorization and policy evaluation, updates the assignment and active attempt, and invalidates obsolete Gmail confirmation identity. Returns canonical assignment/attempt readback. Does not transmit a message.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"assignment_id":{"type":"string","minLength":1,"maxLength":200},"value":{"type":"string","minLength":1,"maxLength":2048}},"required":["assignment_id","value"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"save_outreach_draft_revision","title":"Save a generated outreach draft revision","description":"Save edited subject/body as a revision of a generated draft variant through the same mutation as the app, returning the persisted revision and revision ID. Identical current copy is reused. Preserves admission, draft-state and channel-length validation. Deterministic message-set drafts are immutable here; use the existing recipient override workflow for recipient-specific edits. Nothing is prepared or sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"variant_id":{"type":"string","minLength":1,"maxLength":200},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"body":{"type":"string"}},"required":["variant_id","body"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"list_campaigns","title":"List outreach campaigns","description":"List a bounded page of saved outreach campaigns before creating or editing one. Keep scope unchanged when continuing with the returned cursor. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"scope":{"type":"string","enum":["open","archived"]},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"read_campaign","title":"Read outreach campaign","description":"Read one saved campaign's exact authoring settings and audience counts. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200}},"required":["campaign_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"create_email_campaign","title":"Create exact-copy email campaign","description":"Create or reuse an active targeted campaign with the exact supplied email copy and no LinkedIn variations. The unique campaign name makes identical retries safe; a conflicting name is rejected. Creates no members, drafts, assignments, or sends. The mutation receipt is returned even if detail readback fails; use read_campaign to retry that read.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"subject":{"type":"string","minLength":1},"body":{"type":"string","minLength":1}},"required":["name","subject","body"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"resolve_recipient_tracking_token","title":"Resolve recipient tracking token","description":"Map a {{recipient_tracking_token}} value, such as utm_content from web analytics, back to its Scryu person. A token issued to a person later merged away resolves to the surviving person. A request carrying a token is unverified: scanners and forwards fetch links too. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[A-Za-z0-9_-]{22}$"}},"required":["token"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"list_operators","title":"List assignable operators","description":"List a page of verified, admitted operators that outreach can be assigned to, with operator_user_id, name and email. Pages can be short because unadmitted accounts are skipped, so continue with continue_cursor until is_done before concluding someone is missing. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"cursor":{"anyOf":[{"type":"string"},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":25}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"list_campaign_members","title":"List campaign members and their owners","description":"Read a bounded page of one campaign's active or removed members with each person's title and company and every active outreach assignment they have in this campaign: assignment_id, channel, variation, status and the owning operator. Use it to choose person_ids for bulk_assign_outreach and to read ownership back afterwards. Continue with continue_cursor as cursor and unchanged campaign_id and status until is_done; changing either invalidates the cursor. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200},"status":{"type":"string","enum":["active","removed"]},"cursor":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"limit":{"type":"integer","minimum":1,"maximum":50}},"required":["campaign_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"archive_campaign","title":"Archive outreach campaign","description":"Archive one targeted campaign, the same status change as the app's Archive campaign. It leaves the open list_campaigns scope and is listed under scope archived. Members, drafts, assignments, attempts and accepted send evidence are not deleted, and open assignments are not cancelled or reassigned. The default campaign cannot be archived; pause it instead. Retry is safe: an already archived campaign is returned without another write. Returns the campaign and audience counts read back after the change. Nothing is sent.","group":"outreach","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"campaign_id":{"type":"string","minLength":1,"maxLength":200}},"required":["campaign_id"],"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"},{"name":"count_sent_outreach","title":"Count sent outreach by operator","description":"Count sent outreach across the whole team, per operator who sent it, with each operator's operator_user_id, name, email, total_sent and by_medium counts per channel and variation (manual_email is email; connection_request and inmail_message are LinkedIn). A send is an outreach attempt marked sent, by mark_outreach_sent, agent confirmation or a Gmail BCC copy, counted once however many evidence rows it has. Optionally limit by send time with sent_since (inclusive) and sent_until (exclusive), in epoch milliseconds. Counts are complete only when is_done is true. Otherwise they cover sends up to counted_through_sent_at; call again with continue_cursor as cursor and unchanged sent_since and sent_until, and add that call's counts to these. Returns counts and operator identity only, never recipients or message content. No writes.","group":"outreach","annotations":{"readOnlyHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sent_since":{"type":"integer","minimum":0,"maximum":9007199254740991},"sent_until":{"type":"integer","minimum":0,"maximum":9007199254740991},"cursor":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]}},"additionalProperties":false},"outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":{}},"exposure":"workspace"}],"prompts":[{"name":"create_opportunity_from_prompt","title":"Create opportunity from prompt","description":"Turn an operator instruction into a receipt-backed SCRYU opportunity workflow.","argsSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"operator_prompt":{"type":"string","minLength":1},"company_hint":{"type":"string","minLength":1},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"target_close_date":{"type":"string","minLength":1}},"required":["operator_prompt"],"additionalProperties":false}}],"resources":[{"name":"opportunities","title":"Opportunities","description":"Current SCRYU opportunity pipeline snapshot.","uri":"scryu://opportunities","mimeType":"application/json"}],"resourceTemplates":[{"name":"opportunity","title":"Opportunity","description":"SCRYU opportunity detail by public opportunity id.","uriTemplate":"scryu://opportunities/{opportunity_id}","mimeType":"application/json"},{"name":"company","title":"Company","description":"SCRYU company detail by public company id.","uriTemplate":"scryu://companies/{company_id}","mimeType":"application/json"}]}