Pricing & product-page visits, repeat sessions, high-intent events tagged on the site - sessions carry a Websights-resolved account ID as a custom dimension.
Accounts, open opportunities, stage, owner, activity - queried inside the secure instance.
Company match, size & industry, buyer-intent topics, plus Websights visitor-to-company resolution for anonymous site traffic - intent-first querying to conserve credits.
An MCP server on Cloudflare Workers exposes each source to Claude as a set of scoped, read-only tools - no bulk data storage anywhere in the path. Per LuxSci's own direction (Greg Neville's review), this live-orchestration design is the only path we're building: no data warehouse, no persisted PII, and none of the added BAA/HIPAA governance overhead a store-and-serve model would introduce.
No bulk data storage. Every request is gated by a Cloudflare Zero Trust (Access) login first, so the MCP layer knows which SDR/BDR is asking - then tools call each source API on demand using a single scoped service account per source; Claude composes the signals per query at runtime.
SDRs / BDRs ask questions in the Claude they already use. Claude calls the MCP tools, reasons over the signals, and returns the accounts worth acting on. Phase 1 is read-only - insights stay in the conversation; nothing is written back to source systems yet.
We package repeatable work as skills - Markdown files holding the steps, ICP definitions, scoring logic and brand rules Claude follows. Each skill chains several scoped MCP tools rather than relying on one long prompt.
Blends website company-based tracking, ZoomInfo intent topics and Salesforce stage into a 0–100 account score against the ICP.
Without any persistence layer, the agent can't answer "what changed since yesterday" or track intent over time - every query is answered fresh from the live APIs. A daily digest needs a small snapshot/cache, which this no-warehouse design intentionally excludes.
Drafts compliant, on-brand first-touch outreach for a chosen account, grounded in its live signals.
Each tool is scoped & read-only in Phase 1. ZoomInfo calls lead with intent topics to keep credit usage low. Websights resolves visitor → company client-side and writes the account ID back into GA4, so get_account_sessions() and get_websights_matches() join on the same key - e.g. get_named_accounts() returns "Acme Health Corp - 3 sessions, pricing page" instead of an anonymous visitor count.
Every tool is guarded against misuse, and because Phase 1 is read-only end-to-end, the ceiling on any failure mode below is a wrong or incomplete answer in the conversation - never a wrong write, deletion, or irreversible action against LuxSci's systems.
Claude can only call the specific, scoped read-only functions listed above - no arbitrary API access, and no write or delete tool exists in Phase 1. Worst case: a malicious or confused prompt still can't modify or delete data, because the capability isn't there to call.
Content returned from GA4, Salesforce or ZoomInfo (a note field, a company name) is treated as untrusted data, not instructions - the skill layer strips embedded directives before Claude reasons over it. Worst case: a poisoned CRM note or web session can't hijack the agent into unintended actions.
GA4, Salesforce and ZoomInfo calls are capped per session and per day at the MCP layer. Worst case: a runaway loop or over-eager query pattern can't exhaust API budgets or trigger a source-side lockout.
Every read tool returns a capped page size (e.g. top 50 accounts, not a full-table dump) - separate from the rate/credit caps above. Worst case: someone tries to reconstruct a full CRM/analytics export via many small reads instead of one big one; capped result sizes make that impractical, not just disallowed. (Cap sizes here are placeholders pending LuxSci's input.)
VERTODIGITAL × LUXSCI · BUYING-SIGNAL AGENT · DRAFT ARCHITECTURE FOR REVIEW