Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Crossbeam MCP server

Vendor MCP
Open markdown

The Crossbeam MCP connector routes your AI agent's tool calls to Crossbeam's own MCP server through Scalekit. Each user signs in to Crossbeam once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 11 tools.

Tools
11
What they doRead · write · destructive
11 · 0 · 011 read0 write0 destructive
Users sign in with
OAuth app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Crossbeam MCP connection

    In AgentKit > Connections, create a Crossbeam MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Crossbeam MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'crossbeammcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Crossbeam MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'crossbeammcp_find_new_accounts',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • crossbeammcp_find_new_accountsReturns pipeline-generation accounts: companies your partners sell to that you could go after.Read-only

    Find New Accounts

    Returns pipeline-generation accounts: companies your partners sell to that you could go after. Use when the user asks which companies their partners can introduce them to, for net-new or greenfield prospecting, or for accounts missing from their CRM. 'pipeline_type' classifies the account, not a deal stage. Every account falls into exactly one class, and each row reports its own under the same name. Different filters narrow together and values within one filter are alternatives, so countries=["US","DE"] with employee_ranges=["201-500"] means in the US or Germany, and 201-500 employees. Partner tags are the exception, described on that parameter. Do NOT use for overlap questions about accounts you already work; use find_overlapping_accounts_and_leads. Do NOT use to rank partners on a specific deal; use find_partner_recommendations. If any partner name or the partner tag name resolves to zero or multiple matches, returns ClarificationRequired listing each unresolved value and its candidates; present them to the user and re-invoke with partner_ids or partner_tag_id. Returns: A paginated list of accounts, each with the partners that count it as a customer. If `pagination.has_more` is true, tell the user how many more results exist and ask before fetching the next page. On a free plan only the first page is available and paging is not offered, so `has_more` is false there even when `total_count` reports more matching accounts than came back. An empty result has several possible causes (no partner sharing greenfield data, a free-tier plan, owner-scoped access, or the data not having rebuilt yet), so hedge rather than asserting the user has no new accounts. Data rebuilds every 2 to 24 hours depending on class and plan, so an account added to the CRM today can still appear as net_new. net_new accounts have no `account_id`, since they are absent from your CRM; `domain` is their key.

    Inputs

    account_domainstring
    Search term matched against account name and domain. Used only when account_name is empty or absent.
    account_namestring
    Search term matched against account name and domain. Pass just the company name; strip trailing sales suffixes ('opp', 'opportunity', 'deal', 'account').
    countriesstring
    Filter by headquarters country. ISO 3166-1 alpha-2 codes (US, GB, DE). Use GB for the United Kingdom. Country names and multi-country regions are rejected.
    employee_rangesstring
    Filter by company size. An account matches if its employee count falls in any listed range.
    limitinteger
    Number of records per page (1-10, default 10). Use page to reach further records.default 10
    only_recommendedboolean
    Only return accounts with at least one high-impact partner.default false
    pageinteger
    Page number to retrieve (1-indexed, default 1).default 1
    partner_idsstring
    Partner organization UUIDs. Takes precedence over partner_names and skips fuzzy matching.
    partner_namesstring
    Partner names. Only return accounts at least one of these partners sells to. Fuzzy matched. Pass several to cover a set of partners in one call. Each returned account still lists all of its partners, not just the filtered ones. Ignored if partner_ids is provided.
    partner_tag_idstring
    Partner tag UUID. Retry parameter; takes precedence over partner_tag_name and skips name resolution. Widens rather than narrows: combined with partner_ids or partner_names, accounts are returned for partners matching either filter, not only those matching both.
    partner_tag_namestring
    Partner tag name (fuzzy matched), e.g. 'Strategic' or 'Tier 1'. Only return accounts sold to by partners carrying that tag. Widens the partner filter the same way partner_tag_id does. If ClarificationRequired is returned, present the candidate tags and retry with partner_tag_id.
    pipeline_typestring
    Which class of pipeline-generation account to return. 'prospect': in one of your prospect populations, overlaps a partner's customers, and you have no open opportunity on it. 'net_new': a partner's customer that is absent from your CRM entirely. 'not_in_my_populations': a partner's customer that is in your CRM but in none of your populations; usually a population-rule gap rather than a missed deal. 'all' unions the three.default all
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
    sort_bystring
    How to rank the accounts. 'recommended_partner_count' puts the accounts with the most high-impact partners first, and 'last_partner_customer_date' puts the most recently won partner customers first. Omit for the default, which is recommended_partner_count.
    sort_orderstring
    Sort direction ('asc' or 'desc'). Only used when sort_by is provided; defaults to descending.
  • crossbeammcp_find_overlapping_accounts_and_leadsReturns a list of accounts.Read-only

    Find Overlapping Accounts And Leads

    Returns a list of accounts. Use for any question whose answer is a list of accounts — "which accounts do we share with X", "what accounts overlap with partner Y", "shared customers between us and Z", "list the companies we both have". The named company in these questions is a partner being checked against the user's CRM. If the user asks for partners instead (the inverse direction: "which of our partners work with X", "who else is selling into Y"), use `find_overlapping_partners`. The deciding signal is the shape of the question — accounts-out vs partners-out — not which company is named. Two modes: pass an array in `partners` for a specific-partner report, or an EcosystemFilter object (or omit) for an ecosystem-wide scan. Narrow with per-partner `segments`/`populations`, or with `partners.segments`/`partner_scores`/`tag_name` for ecosystem mode. Use `our_segments` or `our_populations` to restrict which of your own populations are included. Always pass the user's exact wording in name fields (partner name, population name, tag name) — let the tool fuzzy-match. Do not substitute IDs from memory. Ambiguous names come back in a single `ClarificationRequired` listing every candidate; present them to the user, then retry with the confirmed id fields. Large reports compute in the background. If not ready, the tool returns `RetryLater` with `retry_after_seconds`; keep calling on that cadence. Use `page` and `limit` for pagination. `pagination.has_more` is authoritative. Do not re-request a page to test it. When it is false and `total_count` exceeds the rows you received, the account's plan capped the result: report that ceiling instead of describing the rows as ranked or representative. A `sort_warning` means they are not ordered either.

    Inputs

    limitstring
    Number of records per page (1-10, default 10).
    list_namestring
    Optional name to embed in the response's `list_link` URL (rendered with a ✨ prefix in Crossbeam). Derive it from the user's request and the report's scope, e.g. "Mutual customers with Acme" or "My open opportunities vs Acme's customers". When omitted the link opens unnamed and the user names it in Crossbeam before saving.
    our_populationsstring
    Filter to specific populations of your own data. On the first call use name (user's exact wording); on retry after the user confirms, use id to bypass fuzzy matching. Useful for custom populations (segment 'other') that cannot be identified by segment alone.
    our_segmentsstring
    Restrict results to records in these segment types of your own data (customers, open_opportunities, prospects, other). Partner reports default to all segments. Ecosystem reports default to customers, open_opportunities, and other, matching the app's ecosystem view; ask for prospects explicitly to include them.
    pagestring
    Page number to retrieve (1-indexed, default 1).
    partnersstring
    Controls partner selection and determines the report mode: - Array of PartnerSpecs → partner report restricted to those specific partners. - EcosystemFilter object → ecosystem report across all partners, optionally narrowed by segment, partner score, or tag. - Omitted or null → ecosystem report with all partners, restricted to the default ecosystem segments. On the first call always pass the user's exact wording in partners[].name. Do not substitute a UUID or canonical name from memory. See the Name resolution section for the full clarification workflow.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
    sort_bystring
    Column to sort results by: 'record_name' (alphabetical), 'overlap_time' (when the overlap was first detected), or 'partner_overlap_count' (how many partners share this record). Omit for default API ordering. Note: sorting is unavailable on free-tier accounts; a sort_warning will be returned.
    sort_orderstring
    Sort direction ('asc' or 'desc'). Only used when sort_by is provided.
  • crossbeammcp_find_overlapping_partnersReturns a list of partners, sorted by partner-level metrics such as partner_score or deal_size_with_partner.Read-only

    Find Overlapping Partners

    Returns a list of partners, sorted by partner-level metrics such as partner_score or deal_size_with_partner. Use for any question whose answer is a list of partners — "which partners...", "who else is selling into X", "which of our partners work with Y", "who has X as a customer". The named company in these questions is the account being looked up against the user's partner ecosystem. If the user asks for accounts instead (the inverse direction: "which accounts do we share with X", "what overlapping companies do we have with Y"), use `find_overlapping_accounts_and_leads`. The deciding signal is the shape of the question — partners-out vs accounts-out — not which company is named. Identify the account by at least one of: account_id (direct), account_name (fuzzy), or account_domain (fuzzy). account_id bypasses fuzzy matching; name and domain may be combined to narrow on both. Optionally filter the partners with partner_ids or partner_name, or narrow to a partner tag with partner_tag_id or partner_tag_name; omit all to get every partner that shares the account. Always pass the user's exact wording in name fields and let the tool fuzzy-match. Do not substitute IDs from memory. Ambiguous names come back in a single `ClarificationRequired` listing each candidate; present them to the user, then retry with the confirmed id fields. Use sort_by + sort_order to rank partners; page + limit for pagination.

    Inputs

    account_domainstring
    Own account domain (fuzzy matched). Useful when the user mentions a company by URL or email domain. Same ClarificationRequired flow as account_name.
    account_idstring
    Own CRM account ID. Retry parameter; takes precedence over account_name and account_domain and skips fuzzy matching. Supply after the user confirms which account they meant.
    account_namestring
    Own account name (fuzzy matched). Use the user's exact wording on the first call, but strip trailing sales suffixes ('opp', 'opportunity', 'deal', 'account') and pass only the underlying entity — 'the Acme Corp opp' → 'Acme Corp'. If ClarificationRequired is returned, present the candidate accounts and ask the user which one they meant; retry with account_id.
    limitinteger
    Number of partner rows per page (1-100, default 10).default 10
    pageinteger
    Page number to retrieve (1-indexed, default 1).default 1
    partner_idsstring
    Partner organization UUIDs. Retry parameter; takes precedence over partner_name and skips name resolution. Pass one UUID to filter to a single partner, or several to filter to a set. No error if combined with partner_name.
    partner_namestring
    Partner organization name (fuzzy matched). Omit to include all partners. If ClarificationRequired is returned, present the candidate partners and retry with partner_ids.
    partner_tag_idstring
    Partner tag UUID. Retry parameter; takes precedence over partner_tag_name and skips name resolution. Filters to partners carrying this tag.
    partner_tag_namestring
    Partner tag name (fuzzy matched), e.g. 'Strategic' or 'Tier 1'. Filters to partners carrying that tag. If ClarificationRequired is returned, present the candidate tags and retry with partner_tag_id.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
    sort_bystring
    Partner-level metric to sort by. Omit for default ordering.
    sort_orderstring
    Sort direction ('asc' or 'desc'). Only used when sort_by is provided.
  • crossbeammcp_find_partner_recommendationsReturn ranked partner suggestions for an open opportunity, helping identify which partners can best assist with a deal.Read-only

    Find Partner Recommendations

    Return ranked partner suggestions for an open opportunity, helping identify which partners can best assist with a deal.

    Inputs

    deal_or_account_namestringrequired
    Name of the deal or account to look up. Matched case-insensitively against both deal name and account name. Pass just the underlying entity name — strip trailing sales suffixes the user may use ('opp', 'opportunity', 'deal', 'account'). Example: 'the Acme Corp opp' → 'Acme Corp'.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
  • crossbeammcp_find_partner_shared_contactsFind partner-shared contacts at an account, ranked by EI recommendation score.Read-only

    Find Partner Shared Contacts

    Find partner-shared contacts at an account, ranked by EI recommendation score. Contacts are sorted by: partner_insights priority-role signals, partner_insights key_contact signals, insights priority-role signals, insights key_contact signals, then data completeness. Priority roles: decision_maker, economic_buyer, economic_decision_maker, executive_sponsor, technical_buyer, primary_contact. Secondary role: key_contact. A contact only receives a network-wide signal if corroborated across enough organizations. When no partner filter is provided, the API may return the same contact multiple times (once per partner that shared them).

    Inputs

    account_domainstring
    Own account domain (fuzzy matched). Useful when the user mentions a company by URL or email domain. Same ClarificationRequired flow as account_name.
    account_idstring
    Own CRM account ID. Retry parameter; takes precedence over account_name and account_domain and skips fuzzy matching. Supply after the user confirms which account they meant.
    account_namestring
    Own account name (fuzzy matched). Use the user's exact wording on the first call, but strip trailing sales suffixes ('opp', 'opportunity', 'deal', 'account') and pass only the underlying entity — 'the Acme Corp opp' → 'Acme Corp'. If ClarificationRequired is returned, present the candidate accounts and ask the user which one they meant; retry with account_id.
    limitinteger
    Maximum number of contacts to return (1-50, default 10).default 10
    partner_idstring
    Partner organization UUID. Retry parameter; takes precedence over partner_name and skips name resolution. No error if combined with partner_name.
    partner_namestring
    Partner organization name (fuzzy matched). Omit to include contacts from all partners. If ClarificationRequired is returned, present the candidate partners and retry with partner_id.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
  • crossbeammcp_get_account_contextRetrieve a unified view of an account, including details and owner information.Read-only

    Get Account Context

    Retrieve a unified view of an account, including details and owner information. Look up by domain, CRM record ID, or company name.

    Inputs

    account_domainstring
    Search by account's domain
    account_idstring
    Search by the account's CRM record ID
    account_namestring
    Search term for finding accounts. Pass just the company/entity name — strip trailing sales suffixes the user may use ('opp', 'opportunity', 'deal', 'account'). Example: 'the Acme Corp opp' → 'Acme Corp'.
    limitinteger
    Number of records per page (1-100, default 10).default 10
    pageinteger
    Page number to retrieve (1-indexed, default 1).default 1
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
  • crossbeammcp_get_ecosystem_activitySurface recent partner activity across your ecosystem, such as new overlaps, updates, and engagement signals.Read-only

    Get Ecosystem Activity

    Surface recent partner activity across your ecosystem, such as new overlaps, updates, and engagement signals.

    Inputs

    event_typesstring
    Filter by event types: 'partner_deal_opened', 'partner_deal_closed_won', or 'partner_greenfield_deal_closed_won'.
    limitstring
    Maximum number of results to return. Default is 25, must be between 1 and 1000.
    pagestring
    Page number to retrieve. Default is 1. Must be at least 1.
    partner_idsstring
    Filter by partner org UUIDs. Takes precedence over partner_names and skips fuzzy matching.
    partner_namesstring
    Filter by partner names. Fuzzy matched. Ignored if partner_ids is provided.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
    record_idsstring
    A list of CRM record IDs to filter by
    record_typestring
    Type of record, 'account' or 'lead', to source activity forone of accountleaddefault account
  • crossbeammcp_get_partner_contextProvide an overview of a partner relationship, including scores and recent activity.Read-only

    Get Partner Context

    Provide an overview of a partner relationship, including scores and recent activity. Filter by partner name, tag, or region.

    Inputs

    limitinteger
    Number of partners to return per page. Must be between 1 and 100.default 10
    pageinteger
    Page number to retrieve. Must be at least 1.default 1
    partner_idsstring
    Partner org UUIDs to filter results. Takes precedence over partner_names.
    partner_namesstring
    Partner names to filter results. Fuzzy matched. Ignored if partner_ids is provided.
    partner_tag_idstring
    Partner tag UUID to filter by tag. Takes precedence over partner_tag_name.
    partner_tag_namestring
    Partner tag name to filter results. Fuzzy matched. When the user mentions partners by region (EMEA, NAMER, APAC), tier (tier-1, strategic, preferred), partner type (ISV, reseller, agency), or any other categorical label, pass that label here. Ignored if partner_tag_id is provided.
    reasoningstring
    A concise explanation (keep it under ~1000 characters) of why you selected this tool for the user's request: what in the prompt led you to choose it and what you expect the call to return. Strongly encouraged on every call.
    sort_bystring
    Metric to sort partners by.
    sort_orderstring
    Sort direction. Only applied when sort_by is set.