Skip to main content
This page documents the Python MCP surface (mcp.heybtw.com). It reflects mcp-server/tools/account_relationship.py as of this page’s publication — see Schema stability.

Purpose

get_account_relationship answers “tell me everything about this account” for a single company: every event they’ve attended, their contacts with seniority classification, which partners give you a warm intro path to them, an engagement trajectory, and (when HubSpot is connected) pipeline context. It is the primary AE-prep / account-research tool on this surface.

When to use this

  • “What do we know about Zynga?” or “Give me a profile on stripe.com before my call.”
  • Before drafting outreach — warm_intro_paths and context_graph_summary.recommended_actions give you a starting angle.
  • After get_cross_event_patterns surfaces an account worth investigating further.

Parameters

Default behavior

At least one of domain or account_name is required — omitting both does not produce a helpful validation message today (see Errors). Given only domain, the tool returns everything on record for that account: full event history (no separate array cap beyond the limit used at the row level), up to the first 50 deduplicated contacts (contacts_shown/contacts_total tell you if more exist), and all warm intro paths found. Personal-email domains (gmail.com, outlook.com, etc.) are rejected up front — see Errors — because they cannot identify a single company.

Sample request

Sample response

Response field reference

Envelope

data[0]

The sample above is not a verbatim capture. warm_intro_paths entries carry more on the wire than it shows.Contract v1 is the default — omit contract_version and v1 is what you get — and a v1 intro path additionally carries strength (a float, one of 0.9 / 0.58 / 0.38) and strength_label ("strong" / "medium" / "light"). Contract v2 replaces both with a reasons array carrying the observed facts the tier was derived from. v2 is defined but not advertised, so v1 is what a live call returns today.Both are withdrawn (HEY-1897): strength was an invented float and strength_label a claim-like tier. They are documented nowhere on this page on purpose. Judge a path on intro_basis and path_count, and migrate to reasons when v2 is advertised.

Errors

  • Missing both domain and account_name. Raised as a registered invalid_parameter error (issue required, action provide) before any lookup runs — an actionable structured error, not the generic sanitized one. Always pass one of the two.
  • domain is a personal-email provider (e.g. gmail.com). This is handled explicitly and does not error — it returns result_count: 0 with metadata.coverage_note explaining that a personal-email domain cannot identify one company, and suggesting account_name instead.
  • All other failures funnel through the same generic sanitized error as every tool — see get_workspace_overview — Errors and MCP Tools — Errors and troubleshooting.

Pagination and limits

No cursor-based pagination. limit (default 50, clamped to [1, 500]) bounds the underlying event-attendance row fetch used to build event_history and contacts — it is not a direct cap on the number of events or contacts returned (those are built by grouping/deduplicating the fetched rows). contacts is separately hard-capped to the first 50 after dedup regardless of limit; use contacts_total to know if you’re seeing everything.