Trayo

Real-time B2B buying signals on your target accounts: funding, hiring, leadership, tech stack.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Trayo Whoami: Return your current session context: your identity and any notes about your access. Call this to re-anchor who you are acting as.
  • Trayo List Users: List users in your workspace, with the number of accounts assigned to each. Requires users:read permission. Use this to find a userId for scoping operations like listing accounts or
  • Trayo Create User: Create a user. Requires users:manage permission. If the user already exists (by email), adds them to your workspace. Returns userId, email, name, role.

What data it sees

Do you need an account

No: the server works without sign-in

Real-time B2B buying signals on your target accounts: funding, hiring, leadership, tech stack.

Server tool list (37)

Raw names from tools/list. Only developers need these.

trayo_whoamiReturn your current session context: your identity and any notes about your access. Call this to re-anchor who you are acting as.
trayo_list_usersList users in your workspace, with the number of accounts assigned to each. Requires users:read permission. Use this to find a userId for scoping operations like listing accounts or running discoveries.
trayo_create_userCreate a user. Requires users:manage permission. If the user already exists (by email), adds them to your workspace. Returns userId, email, name, role.
trayo_get_configGet the configuration, including solutions description, solutions brief, stakeholder criteria, and highlight words.
trayo_set_configUpdate configuration. Only provided fields are updated; omitted fields remain unchanged.
trayo_list_accountsList accounts with offset pagination. Default response is lean: id, name, fullName, url, linkedinHandle, starred, createdAt. Use `include` to opt into extra fields (researchStatus, logoUrl, updatedAt, assignedUsers). The heavy `researchInfo` blob is NOT available on list results — fetch it per-account via `trayo_get_account(include:['research'])`. Use `offset` + `limit` and the `nextOffset` field in the response to page through large result sets. Max limit is 500.
trayo_get_accountGet details for a specific account. Lean by default — use `include` to opt into heavy fields: research (researchInfo), logo (logoUrl), researchStatus.
trayo_create_accountCreate a new account.
trayo_bulk_create_accountsCreate multiple accounts at once. Deduplicates by name/domain/LinkedIn handle. Enrichment (logos, CoreSignal company data — LinkedIn, employee count, industry — and account-level stakeholders) runs asynchronously in the background after this returns; the response reports how many accounts were queued for enrichment (enrichment.queued), not resolved counts. Firmographics populate on the accounts within a minute or so. Returns created/failed counts, per-account results, enrichment status, and an accountsToken. The accountsToken is an HMAC-signed authorization that covers only NEWLY CREATED accounts from this call; pre-existing accounts matched by dedup (existing: true) are NOT covered, and failed entries are excluded. The token is null when zero accounts were newly created. Save it and pass it to trayo_delete_accounts as the authorization for removing the same set. The token is ALL-OR-NOTHING: you must delete the entire set of accounts created in this call (excluding pre-existing dedup matches).
trayo_update_accountUpdate an existing account. Only provided fields are updated; omitted fields remain unchanged.
trayo_delete_accountsSoft-deletes accounts by NAME (not ID). Requires an accountsToken (from bulk_create_accounts). NOTE: accountsToken is ALL-OR-NOTHING — the names you pass must resolve to EXACTLY the set of account IDs the token was issued for. You cannot delete a partial subset. If any of the originally-created accounts have already been deleted, the token is no longer usable. The agent computes the delete list locally (e.g. from list_events + list_accounts) before calling — useful for pruning accounts that produced no events in a discovery batch.
trayo_trigger_account_researchTrigger AI research for an account. This starts a background job that typically takes 2-10 minutes. Use trayo_get_job_status with jobType "account_research" and the accountId as jobId to poll for completion.
trayo_assign_accountAssign a user to an account. Permission rules: admins can assign any user; regular users can only self-assign (userId must equal the calling user). Idempotent — re-assigning an already-assigned user is a no-op. Returns { id, name, assignedUsers } — call trayo_get_account if you need full account fields.
trayo_unassign_accountRemove a user from an account. Permission rules: admins can unassign any user; regular users can only self-unassign. Returns { success: true } when an assignment was removed, { success: false } when no such assignment existed (no error — treat as a no-op).
trayo_list_peopleList people (contacts/stakeholders) with offset pagination. Optionally filter by account. Default response is lean: id, fullName, email, title, linkedinUsername, accountId, stakeholderResearchStatus, profileImageUrl, eventCount, createdAt, updatedAt. Use `offset` + `limit` and the `nextOffset` field in the response to page through large result sets. Max limit is 500. Unlike `trayo_list_accounts` and `trayo_list_events`, this tool has no `include` parameter — list results always return the fields above; call `trayo_get_person` with its own `include` param when you need research/stakeholderReport data, or the events a specific person is linked to (`include: ["events"]`).
trayo_get_personGet details for a specific person/stakeholder. Lean by default (includes `eventCount`, the number of completed events linked to this person). Use `include` to opt into heavy fields: `research`, `stakeholderReport`, and `events` (the events this person is linked to — each as `{ id, title, eventDate, url, status, reasoning }`, where `id` is the event id for a precise trayo_get_event follow-up and `reasoning` explains why the person is tied to the event).
trayo_trigger_person_researchTrigger AI research for a person/stakeholder. This starts a background job that typically takes 2-10 minutes. Use trayo_get_job_status with jobType "person_research" and the personId as jobId to poll for completion.
trayo_get_job_statusCheck the status of a background research job. Use after triggering account or person research to poll for completion.
trayo_list_signalsList signal definitions with offset pagination. Signals are identified by `signalKey` — pass that as `signalId` to update_signal and as entries in signalKeys for delete_signals. Fields: signalKey, type, salesIntent, detects, includes, excludes. Unknown `fields` values are rejected (previously silently dropped). Use `offset` + `limit` and the `nextOffset` field in the response to page through results. Max limit is 500.
trayo_create_signalCreate a new signal definition. signalKey should be kebab-case (e.g. 'cfo-hire'). type: 'news', 'jobs', or 'job_change'. detects: what content triggers this signal. After creating, call trayo_finalize_signals AND poll trayo_get_finalize_status until done:true before running discoveries — finalize is async (up to 5 min).
trayo_update_signalUpdate a signal definition. Only pass fields you want to change. After updating, call trayo_finalize_signals AND poll trayo_get_finalize_status until done:true before running discoveries — finalize is async (up to 5 min).
trayo_refine_signalRefine a signal using the LLM-based training loop. Pass a natural-language instruction explaining what to change. To cite false-positive events (that matched but shouldn't have) or false-negative events (that should have matched but didn't), INLINE the example titles + short summaries directly in the instruction string, e.g. 'Tighten this signal to exclude generic IT ops hiring. These matched but shouldn't have: 1) "Acme hiring Senior Systems Administrator" — infra role, not AppSec. 2) ...'. Anchor the instruction on the signal's stated intent (detects field) so the LLM can judge what contradicts it. When iterating on a signal across multiple refinements, ALWAYS pass `originalInstructions` (the user's original NL ask from trayo_generate_signals) and `originalSignal` (the signal object as first returned by trayo_generate_signals). These anchor every refine to the user's round-0 intent so corrections converge; without them, each refine re-infers intent from the drifted current signal and prior corrections silently regress. The tool auto-saves the refined signal and returns a boundary diff. You MUST call trayo_finalize_signals AND poll trayo_get_finalize_status until done:true after one or more refinements before running discoveries (finalize is async, up to 5 min), and follow Pattern B (delete_all_events → finalize → re-run) so URL dedup doesn't suppress re-scoring.
trayo_delete_signalsDelete one or more signal definitions. Requires the signalsBatchToken returned by trayo_generate_signals, trayo_create_signal, or a previous trayo_delete_signals call. Returns a refreshed signalsBatchToken for further deletions. After deleting, call trayo_finalize_signals AND poll trayo_get_finalize_status until done:true before running discoveries — finalize is async (up to 5 min).
trayo_finalize_signalsEnqueue a signals finalize run (harmonize boundaries → regenerate DSLs → refresh highlight words). Returns immediately with an enqueuedAt ISO timestamp; the work continues in the background via Inngest. ALWAYS call this after any signal changes (create, update, delete, generate) and BEFORE running discoveries. Then poll trayo_get_finalize_status(tenantId, enqueuedAt) every 15s until done:true.
trayo_get_finalize_statusCheck whether a prior trayo_finalize_signals enqueue has completed. Pass the enqueuedAt ISO timestamp returned by trayo_finalize_signals. Returns done:true once the Inngest run has written the finalize completion marker. Poll every 15 seconds. Finalize can take up to 5 minutes (typical: 1-3). If done stays false after 5 minutes, inspect the Inngest dashboard or retry.
trayo_generate_signalsGenerate signal definitions using AI based on your solutions and website. Signals are saved automatically. IMPORTANT: You MUST call trayo_finalize_signals AND poll trayo_get_finalize_status until done:true after this tool returns before running discoveries — finalize is async (up to 5 min).
trayo_get_jobs_dslDeveloper tool. Returns the combined jobs search DSL used by the Coresignal job discovery pipeline.
trayo_get_career_signal_dslDeveloper tool. Returns the Coresignal Employee API DSL for a specific job_change signal. Only works with job_change type signals.
trayo_list_eventsList events with offset pagination. Filter by account, signal type, status, or batchId. Use `batchId` to see results from a specific discovery run. `matchedSignals` is always included. Default response omits the full `data` blob — pass `include: ['data']` to opt in. Pass `compactMatchedSignals: true` to trim each matchedSignals entry down to {signal_key, confidence}; use `trayo_get_event` for full evidence/signal_name text on individual events. Use `offset` + `limit` and the `nextOffset` field to page through large result sets. Max limit is 500.
trayo_get_eventGet full details for an event including matched signals, why-it-matters analysis, and associated people with reasoning.
trayo_run_discoveriesBefore running: signals must be fully finalized — call trayo_finalize_signals then poll trayo_get_finalize_status until done:true (finalize is async, up to 5 min). Running discoveries before finalize completes uses stale DSLs. Trigger discovery runs. Provide signalTypes array (e.g. ['news', 'jobs']). Scope is determined by params: accountIds → specific accounts, userId → all accounts for that user, neither → all your accounts. Set deepBackfill to true for 60-day lookback (first run); default is 4-day lookback. Returns a batchId for tracking plus a `message` field describing any signal types that were skipped (e.g. jobs/job_change silently skip when no scoped accounts have coresignal_id resolved — inspect `message` if `count` is lower than expected, rather than treating count:0 as an infrastructure failure). Poll status with trayo_get_discovery_status. Discoveries typically take 30 seconds to 10 minutes depending on account count.
trayo_list_batchesList recent discovery batches with timestamps, counts, and completion status. Use this to find batch IDs for status checks, event filtering, or cleanup. Supports offset pagination via `offset` + `nextOffset`; `totalCount` and `hasMore` indicate whether more batches exist beyond the current page. Max limit is 50.
trayo_delete_batch_eventsDeletes events and discoveries from a specific batch (defaults to the latest batch if `batchId` is omitted). Requires a `batchToken` (from `run_discoveries`, must match the resolved batch). Use this to wipe a single batch's events; for wider event wipes (e.g., resetting URL dedup state during signal-change iterations), use `trayo_delete_all_events` instead.
trayo_delete_all_eventsDeletes ALL events and discoveries. Requires elevated authorization. For deleting a single batch instead, use trayo_delete_batch_events.
trayo_get_discovery_statusCheck the status of a discovery batch. Returns counts of discoveries and events by status, plus a 'done' flag. If batchId is omitted, checks the most recent batch. Poll this after trayo_run_discoveries until done is true. NOTE: done=true means all discoveries have finished, but events spawned by completed discoveries may still be processing — check events.pending and events.running to confirm the full batch is settled before reading results.
trayo_generate_solutionsScrape a company website and generate a product/solutions catalog using Firecrawl + LLM. Takes ~30 seconds. Auto-saves solutions and solutionsBrief to config.
trayo_generate_stakeholder_criteriaGenerate stakeholder criteria from solutions catalog. Auto-saves to config. Requires solutions to be set first.