Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Attio MCP server

Vendor MCP
Open markdown

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

Tools
47
What they doRead · write · destructive
28 · 16 · 328 read16 write3 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Manage records: search, create, update, upsert, and merge people, companies, and other object records
  • Work with lists: add records to lists, update list entries, and browse the records in a list
  • Search conversations: search emails, notes, meetings, and call recordings by content or metadata, and read transcripts
  • Manage notes, tasks, and comments: create and update notes and tasks, and add or delete comments
  • Run reports: compute totals, averages, and grouped breakdowns across records or list entries

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 Attio MCP connection

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

    Scalekit credentials are available for Attio, 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 = 'attiomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Attio 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: 'attiomcp_whoami',
    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
  • attiomcp_get_call_recordingRetrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.Read-only

    Get Call Recording

    Retrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.

    Inputs

    call_recording_idstringrequired
    The ID of the call recording to retrieve.
    meeting_idstringrequired
    The ID of the meeting that the call recording is associated with.
  • attiomcp_get_email_contentRetrieves the full content and body of an email.Read-only

    Get Email Content

    Retrieves the full content and body of an email. Requires the mailbox_id and email_id, which can be obtained from email search results.

    Inputs

    email_idstringrequired
    The ID of the email to retrieve content for.
    mailbox_idstringrequired
    The ID of the mailbox containing the email.
  • attiomcp_get_note_bodyRetrieves the full body content of a note by its ID.Read-only

    Get Note Body

    Retrieves the full body content of a note by its ID.

    Inputs

    note_idstringrequired
    The ID of the note to retrieve the body of.
  • attiomcp_get_records_by_idsRetrieve a set of records by their IDs for a given object type.Read-only

    Get Records by IDs

    Retrieve a set of records by their IDs for a given object type. Returns an array of records with their attribute values; records not found are silently omitted from the response.

    Inputs

    objectstringrequired
    The ID or slug of the object for which to retrieve records.
    record_idsarrayrequired
    The IDs of the records to retrieve. Records that are not found will not be included in the response.
  • attiomcp_list_activitiesList all activities in the Attio workspace.Read-only

    List Activities

    List all activities in the Attio workspace. Activities model things that happen over time, such as phone calls or meetings, and each one holds activity records. Returns activity metadata including ID, API slug, singular and plural nouns, and the schemas the activity extends. Use the query parameter to filter by name or slug.

    Inputs

    limitnumber
    Maximum number of results to return.default 10
    offsetnumber
    Number of results to skip for pagination.default 0
    querystring
    Filter returned activities using fuzzy search against activity name or API slug. If null or not provided, returns all activities. example: "phone calls"
  • attiomcp_list_activity_attribute_definitionsList attribute definitions for a given activityRead-only

    List Activity Attribute Definitions

    List attribute definitions for a given activity

    Inputs

    activitystringrequired
    The ID or slug of the activity for which to retrieve attribute definitions. format: slug or UUID examples: "phone_calls" or "97052eb9-e65e-443f-a297-f2d9a4a7f795"
    include_archivedboolean
    If true, the response will include archived attributes.default false
    limitnumber
    Maximum number of results to return.default 20
    offsetnumber
    Number of results to skip for pagination.default 0
    querystring
    Plain text search term for fuzzy matching attribute titles and descriptions. If not specified or null, returns all attributes.
  • attiomcp_list_activity_recordsList records for a given activity, such as phone calls or meetings, with optional filtering and sorting.Read-only

    List Activity Records

    List records for a given activity, such as phone calls or meetings, with optional filtering and sorting. Returns paginated results. Use this tool to retrieve activity records that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attribute values. Before calling this tool, ensure you know the attribute slugs or IDs for any filters or sorts you want to apply. Use the list-activity-attribute-definitions tool to discover available attributes for an activity.

    Inputs

    activitystringrequired
    The activity to list records for. format: slug or UUID examples: "phone_calls" or "97052eb9-e65e-443f-a297-f2d9a4a7f795"
    filterobject
    Filter criteria to apply. If omitted, returns all activity records. Filter syntax supports three types: 1. Single condition: {"attribute":"name", "op":"eq", "value":"Acme Corp"} 2. AND group (all must match): {"and": [{"attribute":"industry", "op":"eq", "value":"Technology"}, {"attribute":"employee_count", "op":"gte", "value":50}]} 3. OR group (any must match): {"or": [{"attribute":"stage", "op":"eq", "value":"Proposal"}, {"attribute":"stage", "op":"eq", "value":"Negotiation"}]} Groups can be nested. Available operators by type: - text: eq, neq, contains, not-contains, starts-with, ends-with - number/currency/rating: eq, neq, gt, gte, lt, lte - date: eq, neq, gt, gte, lt, lte (YYYY-MM-DD format, e.g. "2024-03-15") - timestamp: eq, neq, gt, gte, lt, lte (full ISO 8601 with timezone preferred, e.g. "2024-03-15T14:30:00Z". Bare dates default to midnight UTC) - checkbox: eq, neq (boolean value) - select/status: eq, neq, gt, gte, lt, lte (by option title or sort order) - record_reference: eq, neq (use {object_id, record_id} value) - actor_reference: eq, neq (workspace member UUID) - domain/email/phone/personal_name: eq, neq, contains, not-contains, starts-with, ends-with example: {"and": [{"attribute": "is_customer", "op": "eq", "value": true}, {"attribute": "employee_count", "op": "gte", "value": 50}]}
    limitnumber
    Maximum number of activity records to return (max 50).default 10
    offsetnumber
    Number of activity records to skip for pagination.default 0
    sortsarray
    Sorting to apply (max 2). If empty, results are returned in a deterministic random order. Sortable types: text, number, currency, date, timestamp, checkbox, rating, domain, email_address, phone_number, personal_name. example: [{"attribute": "timestamp", "direction": "desc"}]
  • attiomcp_list_attribute_definitionsList attribute definitions for a given object, including their types, slugs, and configuration.Read-only

    List Attribute Definitions

    List attribute definitions for a given object, including their types, slugs, and configuration. Supports optional fuzzy search and pagination.

    Inputs

    objectstringrequired
    The ID or slug of the object for which to retrieve attribute definitions. format: slug or UUID examples: "companies" or "492c42ea-4def-4e51-9d1b-9ce24fc9e57f"
    include_archivedboolean
    If true, the response will include archived attributes.default false
    limitnumber
    Maximum number of results to return.default 20
    offsetnumber
    Number of results to skip for pagination.default 0
    querystring
    Plain text search term for fuzzy matching attribute titles and descriptions. If not specified or null, returns all attributes.