Generated from MCP registry

SCRYU MCP docs

Canonical endpoint: https://agents.scryu.com/mcp

Code Mode endpoint: https://agents.scryu.com/mcp/code

Prompts

create_opportunity_from_prompt

Turn an operator instruction into a receipt-backed SCRYU opportunity workflow.

Arguments
{
  "$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
}

Tools

list_assigned_outreach

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.

outreach / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

read_outreach

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.

outreach / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "assignment_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "outreach": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    }
  },
  "required": [
    "outreach"
  ],
  "additionalProperties": {}
}

list_outreach_send_evidence

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.

outreach / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

prepare_outreach

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.

outreach

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

get_gmail_agent_send_preference

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.

outreach / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

set_gmail_agent_send_preference

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.

outreach

Input schema
{
  "$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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "preference": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    }
  },
  "required": [
    "preference"
  ],
  "additionalProperties": {}
}

mark_outreach_sent

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.

outreach

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

get_outreach_recipient_override

Read the exact current per-recipient outreach override, persisted conflict, and stale state for one assignment. Authorization is enforced against the assigned operator.

outreach / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "assignment_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "assignment_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "override_state": {
      "type": "object",
      "properties": {},
      "additionalProperties": {}
    }
  },
  "required": [
    "override_state"
  ],
  "additionalProperties": {}
}

edit_outreach_recipient_override

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.

outreach

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

create_search

Create a normal SCRYU search run through the existing provider-agnostic search product path. This may create or enrich backend people/company records through the standard search and reconcile machinery and may appear in search run lists until a future surface/source classification can filter it. Omitted count defaults to 10. Poll get_search until the run is complete before treating readback as final. Use deep_find_person instead for high-volume precise exact-person fallback. It does not expose raw provider knobs.

searches

Input schema
{
  "$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"
      ]
    }
  },
  "required": [
    "label",
    "query"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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"
            }
          ]
        },
        "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": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "company_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "match_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "evidence_reference_count": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "effect_summary": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        "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": {}
}

list_searches

List recent SCRYU search runs with target mode, lifecycle status, result counts, and latest activity. Read-only.

searches / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$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"
              }
            ]
          },
          "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": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "company_count": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "match_count": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "evidence_reference_count": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "effect_summary": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {}
          },
          "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": {}
}

get_search

Load the structured detail readback for a SCRYU search run, including target mode, status, people, companies, matches, activity, and summary counts. Read-only.

searches / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "search_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "search_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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"
            }
          ]
        },
        "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": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "person_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "company_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "evaluation_count": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "evidence_reference_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": {}
            },
            "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",
            "person_count",
            "company_count",
            "evaluation_count",
            "evidence_reference_count",
            "effect_summary",
            "coverage",
            "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": {}
}

find_and_save_companies

Find and save one or more plausible companies from a clean canonical anchor and optionally attach them to a research objective. Pass existing_company_id to enrich a specific existing 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.

companies

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "research_objective_id": {
      "type": "string",
      "minLength": 1
    },
    "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
    }
  },
  "required": [
    "anchor"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "trace_id": {
      "type": "string"
    },
    "research_objective_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "records": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "issues": {
      "type": "array",
      "items": {}
    },
    "receipt": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "status",
    "records",
    "issues",
    "receipt"
  ],
  "additionalProperties": {}
}

find_and_save_company_batch

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.

companies

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "research_objective_id": {
            "type": "string",
            "minLength": 1
          },
          "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
          }
        },
        "required": [
          "anchor"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

plan_company_batch

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.

companies / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "items": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "research_objective_id": {
            "type": "string",
            "minLength": 1
          },
          "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
          }
        },
        "required": [
          "anchor"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

list_companies

List current SCRYU company read-model rows for inspection before cleanup, merge, enrichment, or opportunity work. Read-only.

companies / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "companies": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "required": [
    "companies"
  ],
  "additionalProperties": {}
}

get_company

Load the current company detail view from SCRYU.

companies / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "company_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "company_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "company": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "company"
  ],
  "additionalProperties": {}
}

list_company_tags

List active company tags that can be assigned to companies. Read-only. New custom tags must be created in the UI, not through MCP/API.

companies / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

add_company_tag

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.

companies

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

remove_company_tag

Remove an existing company tag assignment from a company. Call get_company to read back the company state after writing.

companies

Input schema
{
  "$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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "removed": {
      "type": "boolean"
    }
  },
  "required": [
    "removed"
  ],
  "additionalProperties": {}
}

list_company_quality_issues

List compact company identity/data-quality clusters that may need merge, refresh, or operator review. Read-only.

companies / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    },
    "issue_types": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "duplicate_source_url",
          "duplicate_domain",
          "identity_backed_name_skeletons",
          "all_name_skeletons",
          "unlinked_company_matches",
          "relationship_only_duplicates",
          "blocked_identity_key",
          "skeleton_without_refresh_attempt",
          "skeleton_after_refresh_attempt"
        ]
      }
    },
    "recommended_actions": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "resolve",
          "ignore",
          "needs_operator"
        ]
      }
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

merge_companies

Apply an explicit company merge by relinking loser records into a winner and returning a receipt. Use only after inspecting the candidate companies and durable identity evidence. The survivor must not be chosen because a row is richer, more complete, newer, or already selected by preflight routing.

companies

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "winner_company_id": {
      "type": "string",
      "minLength": 1
    },
    "loser_company_ids": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "description": "Durable identity evidence for the merge. Do not use record richness, completeness, recency, preflight routing, or convenience as the reason."
    },
    "mode": {
      "default": "operator",
      "type": "string",
      "enum": [
        "auto",
        "operator"
      ]
    },
    "field_overrides": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "field": {
            "type": "string",
            "enum": [
              "name",
              "externalOrganizationId",
              "primaryDomain",
              "sourceCompanyUrl",
              "sourceCompanyUrlNormalized",
              "location",
              "hq",
              "publicCompany",
              "ticker",
              "industry",
              "sizeBand"
            ]
          },
          "value": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "boolean"
              }
            ]
          },
          "source_company_ids": {
            "minItems": 1,
            "maxItems": 20,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "confidence": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low"
            ]
          },
          "reason": {
            "type": "string",
            "minLength": 1,
            "description": "Evidence for this field value. Do not use record richness, completeness, recency, preflight routing, or convenience as the reason."
          }
        },
        "required": [
          "field",
          "value",
          "source_company_ids",
          "confidence",
          "reason"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "winner_company_id",
    "loser_company_ids",
    "reason",
    "mode"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

plan_delete_companies

Read-only hard-delete plan for stale or bad SCRYU companies. Use before delete_companies. For duplicate companies, prefer list_company_quality_issues, get_company, and merge_companies instead of deleting. Returns exact cascade, detach, and read-model refresh counts.

content / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "company_ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "company_ids"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

delete_companies

Hard-delete stale or bad SCRYU company content after inspection and plan_delete_companies. Requires confirmation DELETE_SCRYU_COMPANIES and a reason. Preserves search matches by detaching the deleted company; clears campaign/outreach company references; deletes company-owned opportunities and related opportunity rows.

content

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "company_ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000
    },
    "confirmation": {
      "type": "string",
      "const": "DELETE_SCRYU_COMPANIES"
    }
  },
  "required": [
    "company_ids",
    "reason",
    "confirmation"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

find_and_save_people

Find and save one or more plausible people from a clean canonical anchor and optionally attach them to a research objective. 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.

people

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "research_objective_id": {
      "type": "string",
      "minLength": 1
    },
    "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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "status": {
      "type": "string"
    },
    "trace_id": {
      "type": "string"
    },
    "research_objective_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "records": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "issues": {
      "type": "array",
      "items": {}
    },
    "receipt": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "status",
    "records",
    "issues",
    "receipt"
  ],
  "additionalProperties": {}
}

deep_find_person

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.

people / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

refresh_person

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.

people

Input schema
{
  "$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
}
Output schema
{
  "$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": [
            "refreshed",
            "unchanged",
            "not_refreshed"
          ]
        },
        {
          "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",
    "changed_fields",
    "error",
    "requested_at",
    "started_at",
    "completed_at"
  ],
  "additionalProperties": {}
}

get_person_refresh

Read the durable queued, running, completed, or failed state for a refresh_id returned by refresh_person.

people / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "refresh_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "refresh_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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": [
            "refreshed",
            "unchanged",
            "not_refreshed"
          ]
        },
        {
          "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",
    "changed_fields",
    "error",
    "requested_at",
    "started_at",
    "completed_at"
  ],
  "additionalProperties": {}
}

set_person_contact_info

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.

people

Input schema
{
  "$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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "person"
  ],
  "additionalProperties": {}
}

list_people

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.

people / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

list_people_quality_issues

List compact person data-quality clusters and sparse visible people that may need refresh, duplicate review, or operator cleanup. Read-only.

people / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    },
    "issue_types": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "duplicate_profile_url",
          "duplicate_name_company",
          "skeleton",
          "partial",
          "needs_refresh"
        ]
      }
    },
    "recommended_actions": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "resolve",
          "ignore",
          "needs_operator"
        ]
      }
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

merge_people

Apply an explicit person merge by relinking loser records into a winner and returning a receipt. Use only after inspecting the candidate people, profile URLs, employment/contact context, and durable identity evidence. The survivor must not be chosen because a row is richer, more complete, newer, more convenient, or already selected by preflight routing.

people

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "winner_person_id": {
      "type": "string",
      "minLength": 1
    },
    "loser_person_id": {
      "type": "string",
      "minLength": 1
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "description": "Durable identity evidence for the person merge. Do not use record richness, completeness, recency, preflight routing, or convenience as the reason."
    }
  },
  "required": [
    "winner_person_id",
    "loser_person_id",
    "reason"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

get_person

Load the current person detail view from SCRYU.

people / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "person_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "person"
  ],
  "additionalProperties": {}
}

plan_delete_people

Read-only hard-delete plan for stale or bad SCRYU people. Use before delete_people. Returns exact cascade, detach, opportunity participant/contact cleanup, and read-model refresh counts.

content / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person_ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    }
  },
  "required": [
    "person_ids"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

delete_people

Hard-delete stale or bad SCRYU people after inspection and plan_delete_people. Requires confirmation DELETE_SCRYU_PEOPLE and a reason. Preserves search matches by detaching the deleted person; removes opportunity participants/primary contact references; deletes person campaign memberships and outreach drafts.

content

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person_ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000
    },
    "confirmation": {
      "type": "string",
      "const": "DELETE_SCRYU_PEOPLE"
    }
  },
  "required": [
    "person_ids",
    "reason",
    "confirmation"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

list_employment_company_repair_candidates

Read-only discovery for likely placeholder, skeleton, or conflated employer source companies before employment-company repair. Use company_ids for explicit source company inspection, or bounded issue_types/limits, source_company_search_query, and cursor to traverse visible skeleton employer companies with current people. Returns public company_ids/person_ids/employment_ids, quality issue reasons, current people, truncation flags, cursor-traversal continue_cursor/is_done, and guidance for get_person, get_company, find_and_save_companies, plan_employment_company_repair, and apply_employment_company_repair with source_company_id and source_employment_id when needed. Always inspect truncated and specific truncation flags before treating the candidate set as complete. Does not run provider lookup/search, select a target company, expose provider internals, or mutate records.

content / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "company_ids": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "cursor": {
      "description": "Server-generated continue_cursor from a previous non-explicit discovery page. Reuse with the same issue_types and source_company_search_query. Cannot be combined with company_ids.",
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "source_company_search_query": {
      "description": "Case-insensitive filter over discovered source company_id, name, and normalized_name. Applies only when company_ids is omitted.",
      "type": "string",
      "minLength": 1
    },
    "issue_types": {
      "description": "Quality issue filters to discover candidate source companies. Defaults to visible skeleton employer companies.",
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "skeleton_without_refresh_attempt",
          "skeleton_after_refresh_attempt",
          "all_name_skeletons",
          "unlinked_company_matches"
        ]
      }
    },
    "limit_companies": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "people_per_company": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25
    }
  },
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "summary": {
      "type": "object",
      "properties": {
        "source": {
          "type": "string",
          "enum": [
            "explicit_company_ids",
            "quality_issues"
          ]
        },
        "candidate_companies": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "scanned_companies": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "returned_companies": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "returned_people": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "company_limit": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "people_per_company": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "issue_types": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "skeleton_without_refresh_attempt",
              "skeleton_after_refresh_attempt",
              "all_name_skeletons",
              "unlinked_company_matches"
            ]
          }
        },
        "source_company_search_query": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "continue_cursor": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "cursor_reset_reason": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "invalid_cursor",
                "filters_changed",
                "source_companies_changed"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "is_done": {
          "type": "boolean"
        },
        "company_limit_truncated": {
          "type": "boolean"
        },
        "people_truncated": {
          "type": "boolean"
        },
        "quality_issue_discovery_truncated": {
          "type": "boolean"
        },
        "truncated": {
          "type": "boolean"
        }
      },
      "required": [
        "source",
        "candidate_companies",
        "scanned_companies",
        "returned_companies",
        "returned_people",
        "company_limit",
        "people_per_company",
        "issue_types",
        "company_limit_truncated",
        "people_truncated",
        "quality_issue_discovery_truncated",
        "truncated"
      ],
      "additionalProperties": false
    },
    "candidates": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "source_company": {
            "type": "object",
            "properties": {
              "company_id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "normalized_name": {
                "type": "string"
              },
              "primary_domain": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "source_company_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "source_company_url_normalized": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "completeness_status": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "has_company_list_row": {
                "type": "boolean"
              },
              "known_relevant_people_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "recent_match_count": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "quality_issue_types": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "skeleton_without_refresh_attempt",
                    "skeleton_after_refresh_attempt",
                    "all_name_skeletons",
                    "unlinked_company_matches"
                  ]
                }
              },
              "quality_issue_reasons": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "company_id",
              "name",
              "normalized_name",
              "primary_domain",
              "source_company_url",
              "source_company_url_normalized",
              "completeness_status",
              "has_company_list_row",
              "known_relevant_people_count",
              "recent_match_count",
              "quality_issue_types",
              "quality_issue_reasons"
            ],
            "additionalProperties": false
          },
          "quality_issues": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "issue_id": {
                  "type": "string"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "skeleton_without_refresh_attempt",
                    "skeleton_after_refresh_attempt",
                    "all_name_skeletons",
                    "unlinked_company_matches"
                  ]
                },
                "recommended_action": {
                  "type": "string",
                  "enum": [
                    "resolve",
                    "ignore",
                    "needs_operator"
                  ]
                },
                "reason": {
                  "type": "string"
                },
                "candidate_company_ids": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "issue_id",
                "type",
                "recommended_action",
                "reason",
                "candidate_company_ids"
              ],
              "additionalProperties": false
            }
          },
          "current_people": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "person_id": {
                  "type": "string"
                },
                "employment_id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "current_title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "current_company_name": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "source_profile_url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "profile_url_normalized": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "location": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "recent_match_count": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                }
              },
              "required": [
                "person_id",
                "employment_id",
                "name",
                "current_title",
                "current_company_name",
                "source_profile_url",
                "profile_url_normalized",
                "location",
                "recent_match_count"
              ],
              "additionalProperties": false
            }
          },
          "current_people_truncated": {
            "type": "boolean"
          },
          "suggested_next_actions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "source_company",
          "quality_issues",
          "current_people",
          "current_people_truncated",
          "suggested_next_actions"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "summary",
    "candidates"
  ],
  "additionalProperties": false
}

plan_employment_company_repair

Read-only plan for repairing up to 25 selected people whose current employment is attached to the wrong company, or for detaching that employment from any company. Inspect each person with get_person and the intended company with get_company first. Use only public person_ids/company_id/employment_id values and a durable evidence reason. Pass source_company_id from candidate source_company.company_id when a selected person has multiple current employments; pass source_employment_id from current_people.employment_id when source_company_id still matches multiple current employments. If current employment is still ambiguous, the plan returns a blocked repair row with public blocking_company_ids instead of erroring out or guessing. Detach means apply_employment_company_repair will clear the match company link rather than point it at another company. This does not run provider lookup, auto-detection, broad reporting, or raw-employer cleanup.

content / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person_ids": {
      "minItems": 1,
      "maxItems": 25,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "source_company_id": {
      "description": "Optional source company_id from list_employment_company_repair_candidates. Pass this when a selected person has multiple current employments so repair operates only on that exact current source company.",
      "type": "string",
      "minLength": 1
    },
    "source_employment_id": {
      "description": "Optional public employment_id from list_employment_company_repair_candidates current_people. May be passed with or without source_company_id when the selected person has multiple current employments and the exact employment row must be selected; if both are supplied, they must agree.",
      "type": "string",
      "minLength": 1
    },
    "target": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "company"
            },
            "company_id": {
              "type": "string",
              "minLength": 1,
              "description": "Existing SCRYU company_id from get_company. This reattaches selected current employment matches to that company."
            }
          },
          "required": [
            "kind",
            "company_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "detach",
              "description": "Detach selected current employment matches from any company. Applying this clears the match company link."
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000,
      "description": "Durable identity evidence for the employment-company repair. Cite stable public profile, employer, or source evidence; do not use record richness, recency, convenience, or placeholder cleanup as the reason."
    }
  },
  "required": [
    "person_ids",
    "target",
    "reason"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "dry_run": {
      "type": "boolean",
      "const": true
    },
    "reason": {
      "type": "string"
    },
    "target": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "company"
            },
            "company_id": {
              "type": "string"
            }
          },
          "required": [
            "kind",
            "company_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "detach"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "repairs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "person_id": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "reattach",
              "dedupe_to_target",
              "detach",
              "already_at_target",
              "blocked"
            ]
          },
          "from_company_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_company_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "matches_to_patch": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "block_reason": {
            "type": "string",
            "enum": [
              "ambiguous_current_employment",
              "stale_source_employment"
            ]
          },
          "block_message": {
            "type": "string"
          },
          "blocking_company_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "person_id",
          "action",
          "from_company_id",
          "to_company_id",
          "matches_to_patch"
        ],
        "additionalProperties": false
      }
    },
    "affected_company_ids": {
      "type": "object",
      "properties": {
        "source": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "target": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "source",
        "target"
      ],
      "additionalProperties": false
    },
    "counts": {
      "type": "object",
      "properties": {
        "selected_people": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reattach": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "detach": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "already_at_target": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_move": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_delete": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_dedupe": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "matches_to_patch": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "company_list_rows_to_refresh": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "person_list_rows_to_refresh": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "selected_people",
        "reattach",
        "detach",
        "already_at_target",
        "employments_to_move",
        "employments_to_delete",
        "employments_to_dedupe",
        "matches_to_patch",
        "company_list_rows_to_refresh",
        "person_list_rows_to_refresh"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "dry_run",
    "reason",
    "target",
    "repairs",
    "affected_company_ids",
    "counts"
  ],
  "additionalProperties": false
}

apply_employment_company_repair

Apply a closed-world employment-company repair for up to 25 selected people after plan_employment_company_repair and explicit inspection with get_person/get_company. Requires confirmation REPAIR_EMPLOYMENT_COMPANY and a durable evidence reason. Pass the same source_company_id and source_employment_id used in the accepted plan when disambiguating multiple current employments. A company target reattaches selected current employment matches to that existing company; detach clears the match company link. Do not use this for auto-detection, provider internals, raw-employer cleanup, or convenience-only cleanup.

content

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "person_ids": {
      "minItems": 1,
      "maxItems": 25,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "source_company_id": {
      "description": "Optional source company_id from list_employment_company_repair_candidates. Pass this when a selected person has multiple current employments so repair operates only on that exact current source company.",
      "type": "string",
      "minLength": 1
    },
    "source_employment_id": {
      "description": "Optional public employment_id from list_employment_company_repair_candidates current_people. May be passed with or without source_company_id when the selected person has multiple current employments and the exact employment row must be selected; if both are supplied, they must agree.",
      "type": "string",
      "minLength": 1
    },
    "target": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "company"
            },
            "company_id": {
              "type": "string",
              "minLength": 1,
              "description": "Existing SCRYU company_id from get_company. This reattaches selected current employment matches to that company."
            }
          },
          "required": [
            "kind",
            "company_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "detach",
              "description": "Detach selected current employment matches from any company. Applying this clears the match company link."
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "reason": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4000,
      "description": "Durable identity evidence for the employment-company repair. Cite stable public profile, employer, or source evidence; do not use record richness, recency, convenience, or placeholder cleanup as the reason."
    },
    "confirmation": {
      "type": "string",
      "const": "REPAIR_EMPLOYMENT_COMPANY"
    }
  },
  "required": [
    "person_ids",
    "target",
    "reason",
    "confirmation"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "reason": {
      "type": "string"
    },
    "target": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "company"
            },
            "company_id": {
              "type": "string"
            }
          },
          "required": [
            "kind",
            "company_id"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "detach"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        }
      ]
    },
    "repairs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "person_id": {
            "type": "string"
          },
          "action": {
            "type": "string",
            "enum": [
              "reattach",
              "dedupe_to_target",
              "detach",
              "already_at_target",
              "blocked"
            ]
          },
          "from_company_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "to_company_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "matches_to_patch": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "block_reason": {
            "type": "string",
            "enum": [
              "ambiguous_current_employment",
              "stale_source_employment"
            ]
          },
          "block_message": {
            "type": "string"
          },
          "blocking_company_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "person_id",
          "action",
          "from_company_id",
          "to_company_id",
          "matches_to_patch"
        ],
        "additionalProperties": false
      }
    },
    "affected_company_ids": {
      "type": "object",
      "properties": {
        "source": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "target": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "source",
        "target"
      ],
      "additionalProperties": false
    },
    "dry_run": {
      "type": "boolean",
      "const": false
    },
    "applied_at": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "counts": {
      "type": "object",
      "properties": {
        "selected_people": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reattach": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "detach": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "already_at_target": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_move": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_delete": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_to_dedupe": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "matches_to_patch": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "company_list_rows_to_refresh": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "person_list_rows_to_refresh": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_moved": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_deleted": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "employments_deduped": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "matches_patched": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "person_list_rows_refresh_attempted": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "company_list_rows_refresh_attempted": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        }
      },
      "required": [
        "selected_people",
        "reattach",
        "detach",
        "already_at_target",
        "employments_to_move",
        "employments_to_delete",
        "employments_to_dedupe",
        "matches_to_patch",
        "company_list_rows_to_refresh",
        "person_list_rows_to_refresh",
        "employments_moved",
        "employments_deleted",
        "employments_deduped",
        "matches_patched",
        "person_list_rows_refresh_attempted",
        "company_list_rows_refresh_attempted"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "reason",
    "target",
    "repairs",
    "affected_company_ids",
    "dry_run",
    "applied_at",
    "counts"
  ],
  "additionalProperties": false
}

list_opportunities

List SCRYU opportunities in a pipeline or queue-shaped view with filters for stage, status, owner, company, health, staleness, due state, and text.

opportunities / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

get_opportunity

Load the full SCRYU opportunity detail read model: company, people, requirements, tasks, notes, activity, signals, and coverage.

opportunities / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "opportunity_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "opportunity"
  ],
  "additionalProperties": {}
}

create_opportunity

Create a SCRYU opportunity linked to an existing company, with optional source records, spend estimate, next action, and initial note.

opportunities

Input schema
{
  "$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
      }
    },
    "source_research_objective_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
          }
        },
        "created_from_objective_id": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "title",
        "body_markdown"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "company_id",
    "name"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

update_opportunity

Patch core SCRYU opportunity fields. Use move_opportunity_stage for explicit stage transitions.

opportunities

Input schema
{
  "$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"
        }
      ]
    },
    "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
}
Output schema
{
  "$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": {}
}

move_opportunity_stage

Move an open SCRYU opportunity between Qualification, Scoping, and Contracting.

opportunities

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

complete_opportunity

Complete an opportunity with a terminal Sold or Lost outcome. Lost requires loss_reason. Sold creates or links one active engagement; Lost never does.

opportunities

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity_id": {
      "type": "string",
      "minLength": 1
    },
    "outcome": {
      "type": "string",
      "enum": [
        "sold",
        "lost"
      ]
    },
    "loss_reason": {
      "type": "string",
      "minLength": 1
    },
    "note": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "opportunity_id",
    "outcome"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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"
        }
      ]
    }
  },
  "required": [
    "opportunity_id",
    "outcome",
    "completion_stage",
    "loss_reason",
    "active_engagement_id"
  ],
  "additionalProperties": {}
}

add_opportunity_context

Append opportunity context: note, spend basis, next action, requirements, tasks, and discovered people. Writes are explicit and receipt-backed.

opportunities

Input schema
{
  "$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
          }
        },
        "created_from_objective_id": {
          "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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity_id": {
      "type": "string"
    }
  },
  "additionalProperties": {}
}

list_opportunity_tasks

List opportunity task queues for one opportunity, optionally filtered by status.

opportunities / read-only

Input schema
{
  "$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"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    }
  },
  "required": [
    "opportunity_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "tasks": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    }
  },
  "required": [
    "tasks"
  ],
  "additionalProperties": {}
}

upsert_opportunity_task

Create or update a due-date action for an opportunity.

opportunities

Input schema
{
  "$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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "task": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "task"
  ],
  "additionalProperties": {}
}

complete_opportunity_task

Complete an opportunity task with an optional completion note.

opportunities

Input schema
{
  "$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
}
Output schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": {}
}

scope_opportunity

Return deterministic scoping guidance for an opportunity: missing roles, requirements, risks, spend basis, and suggested next actions.

opportunities / read-only

Input schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "opportunity_id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "opportunity_id"
  ],
  "additionalProperties": false
}
Output schema
{
  "$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": {}
}

get_opportunity_activity

Load recent opportunity timeline activity for one opportunity or the workspace queue.

opportunities / read-only

Input schema
{
  "$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
}
Output schema
{
  "$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": {}
}

Resources

opportunities

Current SCRYU opportunity pipeline snapshot.

scryu://opportunities

opportunity

SCRYU opportunity detail by public opportunity id.

scryu://opportunities/{opportunity_id}

company

SCRYU company detail by public company id.

scryu://companies/{company_id}