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
- 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
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. 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>Create the Attio MCP connection
In AgentKit > Connections, create an Attio MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for Attio, so you don't need to register an OAuth app.
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.actionsconst connector = 'attiomcp'const identifier = 'user_123'// Generate an authorization link for the userconst { 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 callconst result = await actions.executeTool({connector,identifier,toolName: 'attiomcp_whoami',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "attiomcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Attio MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="attiomcp_whoami",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolattiomcp_get_call_recordingRetrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.Read-onlyGet 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-onlyGet 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-onlyGet 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-onlyGet 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-onlyList 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-onlyList 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-onlyList 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-onlyList 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.
attiomcp_list_comment_repliesList replies to a top-level comment thread by its comment ID.Read-onlyList Comment Replies
List replies to a top-level comment thread by its comment ID. Only works with top-level comments; reply comments cannot be used as the parent.
Inputs
comment_idstringrequired- The ID of the parent comment thread to list replies for. Must be a top-level comment, not a reply.
limitnumber- Maximum number of replies to return.default
20 offsetnumber- Number of results to skip for pagination.default
0
attiomcp_list_commentsList paginated top-level comments on a record or list entry, with up to 5 replies each.Read-onlyList Comments
List paginated top-level comments on a record or list entry, with up to 5 replies each. Provide either (parent_object + parent_record_id) for records, or (parent_list + parent_entry_id) for list entries.
Inputs
limitnumber- Maximum number of top-level comments to return.default
10 offsetnumber- Number of results to skip for pagination.default
0 parent_entry_idstring- Filter to comments on a specific list entry. The entry ID. Must be provided with parent_list.
parent_liststring- Filter to comments on a specific list entry. The list the entry belongs to. Must be provided with parent_entry_id.
parent_objectstring- Filter to comments on a specific record. The object the record belongs to. Must be provided with parent_record_id.
parent_record_idstring- Filter to comments on a specific record. The record ID. Must be provided with parent_object.
attiomcp_list_list_attribute_definitionsList attribute definitions for a given list, including entry-level attribute types and slugs.Read-onlyList List Attribute Definitions
List attribute definitions for a given list, including entry-level attribute types and slugs. Supports optional fuzzy search and pagination.
Inputs
liststringrequired- The ID or slug of the list for which to retrieve attribute definitions. format: slug or UUID examples: "sales_pipeline" or "9c3a6765-a97f-4eec-a01a-f48b3dd89ec7"
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_listsList all lists in the Attio workspace, returning metadata such as ID, name, API slug, and parent object types.Read-onlyList Lists
List all lists in the Attio workspace, returning metadata such as ID, name, API slug, and parent object types. Optionally filter by name or slug using the query parameter.
Inputs
limitnumber- Maximum number of results to return.default
10 offsetnumber- Number of results to skip for pagination.default
0 querystring- Filter returned lists using fuzzy search against list name or API slug. If null or not provided, returns all lists.
attiomcp_list_objectsList all objects in the Attio workspace.Read-onlyList Objects
List all objects in the Attio workspace. Objects are the types of record the workspace stores, such as companies, people and deals. Returns object metadata including ID, API slug, singular and plural nouns, and whether the object is a standard Attio object. 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 objects using fuzzy search against object name or API slug. If null or not provided, returns all objects. example: "companies"
attiomcp_list_recordsRetrieve a paginated list of records from a specified object type such as people, companies, or deals.Read-onlyList Records
Retrieve a paginated list of records from a specified object type such as people, companies, or deals. Supports optional filtering with comparison operators and sorting by attribute values.
Inputs
objectstringrequired- The object to list records from. format: slug or UUID examples: "companies" or "people" or "492c42ea-4def-4e51-9d1b-9ce24fc9e57f"
filterobject- Filter criteria to apply. If omitted, returns all 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 records to return (max 50).default
10 offsetnumber- Number of 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": "name", "direction": "asc"}]
attiomcp_list_records_in_listList entries in a given list with optional filtering and sorting, returning paginated results.Read-onlyList Records in List
List entries in a given list with optional filtering and sorting, returning paginated results. Each entry includes the parent record and all entry-level attributes.
Inputs
liststringrequired- The list to query entries from. format: slug or UUID examples: "my_sales_pipeline" or "9c3a6765-a97f-4eec-a01a-f48b3dd89ec7"
filterobject- Filter criteria to apply. If omitted, returns all entries. 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 entries to return (max 50).default
10 offsetnumber- Number of entries 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": "name", "direction": "asc"}]
attiomcp_list_tasksList tasks in the workspace with optional filters for assignee, completion status, linked record, and date ranges.Read-onlyList Tasks
List tasks in the workspace with optional filters for assignee, completion status, linked record, and date ranges. Returns paginated results including task content, deadlines, and linked record details.
Inputs
assignee_workspace_member_idstring- Filter by assignee. Pass a workspace member ID to find tasks assigned to that member. Pass null to find unassigned tasks.
created_at_gtestring- Filter to tasks created at or after this timestamp (inclusive).
created_at_ltestring- Filter to tasks created at or before this timestamp (inclusive).
deadline_at_gtestring- Filter to tasks with deadline at or after this timestamp (inclusive).
deadline_at_ltestring- Filter to tasks with deadline at or before this timestamp (inclusive).
is_completedboolean- Filter by completion status. true returns only completed tasks, false returns only incomplete tasks. Omit to return all tasks.
limitnumber- Maximum number of results to return.default
10 linked_record_idstring- Filter to tasks linked to a specific record. The record ID. Must be provided with linked_record_object.
linked_record_objectstring- Filter to tasks linked to a specific record. The object the linked record belongs to. Must be provided with linked_record_id.
offsetnumber- Number of results to skip for pagination.default
0 sort_bystring- Attribute to sort results by. Defaults to deadline_at.one of
created_atdeadline_atdefaultdeadline_at sort_directionstring- The sort direction.one of
ascdescdefaultasc
attiomcp_list_workspace_membersList members in the Attio workspace, returning their ID, email address, name, access level, and team memberships.Read-onlyList Workspace Members
List members in the Attio workspace, returning their ID, email address, name, access level, and team memberships. Optionally filter by name, email, or team using the query parameter.
Inputs
include_suspendedboolean- If true, response will include suspended members.default
false querystring- Filter returned members using fuzzy search against member name, email address, and teams they are a member of. If null or not provided, returns all members.
attiomcp_list_workspace_teamsList teams in the Attio workspace, returning each team's ID, name, description, archived status, creation timestamp, and members.Read-onlyList Workspace Teams
List teams in the Attio workspace, returning each team's ID, name, description, archived status, creation timestamp, and members. Teams are groups of workspace members used primarily for permission management.
Inputs
include_archivedboolean- If true, the response will include archived teams.default
false
attiomcp_run_basic_reportRun an aggregate report on records in an object or entries in a list, computing totals, averages, minimums, maximums, or grouped breakdowns.Read-onlyRun Basic Report
Run an aggregate report on records in an object or entries in a list, computing totals, averages, minimums, maximums, or grouped breakdowns. Supports optional filtering and up to two group-by dimensions.
Inputs
metricstringrequired- The metric to report on. Supports two types of metrics: "count": count records/entries (does not require attribute_path): {"type":"count"} "attribute": aggregate a numeric attribute (number/currency) with sum/mean/min/max/count: - {"type":"attribute","attribute_path":[["companies","employee_count"]],"aggregation":"sum"} - {"type":"attribute","attribute_path":[["deals","value"]],"aggregation":"mean"} Aggregation happens after filter and before grouping. format: metric object
sourcestringrequired- The source dataset for the report. Must be a list or object. Use a list/object slug or UUID. The first segment in any metric attribute_path or group_by path must reference this same source. Use list-lists to find lists and list-attribute-definitions to discover source attributes. format: slug or UUID examples: "companies" or "492c42ea-4def-4e51-9d1b-9ce24fc9e57f" or "top_customers"
filterobject- Filter criteria to apply on the source dataset. If omitted, returns all records/entries from the source. Filters are applied before metric aggregation and grouping. 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}]}
group_byarray- One or more values to group by (max 2). If omitted, the response is a single number. If one grouping is provided, response is an object keyed by that grouping value. If two groupings are provided, response is a nested object keyed by primary then secondary grouping value. For two groupings, group_by[0] is primary (outer key) and group_by[1] is secondary (inner key). Examples: - [{"path":[["companies","industry"]]}] - [{"path":[["deals","stage"]]},{"path":[["deals","owner"]]}] format: Array of group by objects
attiomcp_search_call_recordings_by_metadataSearch all call recordings in the workspace by metadata such as speaker workspace members, speaker person records, related records, meeting title, and time range.Read-onlySearch Call Recordings by Metadata
Search all call recordings in the workspace by metadata such as speaker workspace members, speaker person records, related records, meeting title, and time range. Returns paginated call recording metadata ordered by start time (most recent first); use get-call-recording to fetch full transcripts.
Inputs
limitnumber- Maximum number of results to return.default
20 meeting_title_querystring- Full-text search query to filter call recordings by meeting title.
offsetnumber- Number of results to skip for pagination.default
0 related_record_idsarray- Filter to call recordings associated with specific records — must be provided with related_record_object.
related_record_objectstring- The object type of the related records to filter by — must be provided with related_record_ids.
speaker_person_record_idsarray- Filter to call recordings where all specified person records were speakers.
speaker_workspace_member_idsarray- Filter to call recordings where all specified workspace members were speakers.
starts_afterstring- Filter to call recordings that started on or after this timestamp (inclusive).
starts_beforestring- Filter to call recordings that started on or before this timestamp (inclusive).
attiomcp_search_emails_by_metadataSearch emails visible to the user by metadata including participant email addresses, domain, and sent time range.Read-onlySearch Emails by Metadata
Search emails visible to the user by metadata including participant email addresses, domain, and sent time range. Returns paginated email metadata ordered by sent time (most recent first); use get-email-content to retrieve full email bodies.
Inputs
cursorstring- Opaque pagination cursor from the next_cursor field of a previous response. Omit to fetch the first page. Do not construct manually.
domainstring- Filter by domain the email came from or was sent to. ORed with participant_email_addresses filter if both are provided. This filter is meant for external domains: mailboxes in this workspace whose addresses match the domain are excluded from the search scope, so filtering by the company's own domain returns no results. example: example.com
exclude_automated_participantsboolean- If true, only return emails with at least one external participant that looks like a person rather than an automated sender (notifications@, no-reply@, meeting notetakers). Defaults to false, which returns every email regardless of sender.
example: falsedefault
false limitnumber- Maximum number of results to return. A page may contain fewer results than this (even zero) while more results exist â this does not mean the end of results; rely on has_more instead.
example: 10default
20 participant_email_addressesarray- Filter by email participants. Filters by participants of all roles (from, to, cc, bcc). ORed with domain filter if both are provided. This filter is meant for external participants: mailboxes connected in this workspace (e.g. the user's own address or a teammate's) are excluded from the search scope, so filtering by such an address returns no results. format: Array of valid email addresses. example: ["john@example.com", "jane@example.com"]
sent_at_gtstring- Filter to emails sent after this timestamp. format: ISO 8601 timestamp string. UTC timezone. example: 2026-01-01T00:00:00.000Z
sent_at_ltstring- Filter to emails sent before this timestamp. format: ISO 8601 timestamp string. UTC timezone. example: 2026-01-31T23:59:59.999Z
attiomcp_search_meetingsSearch past and future meetings in the workspace by participants, related records, and time range.Read-onlySearch Meetings
Search past and future meetings in the workspace by participants, related records, and time range. Returns paginated results split into past meetings (most recent first) and future meetings (soonest first), with call recording IDs for past meetings.
Inputs
starts_afterstringrequired- Filter to meetings starting after this timestamp (exclusive).
starts_beforestringrequired- Filter to meetings starting before this timestamp (exclusive).
timezonestringrequired- IANA timezone string used for all-day meeting calculations.
limitnumber- Maximum number of results to return.default
20 offsetnumber- Number of results to skip for pagination.default
0 participant_email_addressesarray- Filter to meetings where participants with matching email addresses are present.
participant_email_addresses_operatorstring- AND requires all specified emails to be participants; OR requires any one of them.one of
ANDORdefaultOR related_record_idsarray- Filter to meetings linked to specific records — must be provided with related_record_object.
related_record_objectstring- The object type for related record filtering — must be provided with related_record_ids.
related_records_operatorstring- AND requires the meeting to be linked to all specified records; OR requires linkage to any one of them.one of
ANDORdefaultAND
attiomcp_search_notes_by_metadataSearch notes by metadata including parent record, associated meeting, author workspace member, and creation time range.Read-onlySearch Notes by Metadata
Search notes by metadata including parent record, associated meeting, author workspace member, and creation time range. Returns paginated results ordered by creation date (most recent first).
Inputs
created_at_gtstring- Filter to notes created after this timestamp.
created_at_ltstring- Filter to notes created before this timestamp.
limitnumber- Maximum number of results to return.default
10 meeting_idstring- Filter to notes associated with a specific meeting.
offsetnumber- Number of results to skip for pagination.default
0 parent_record_idstring- The record ID to filter notes by — must be provided with parent_record_object.
parent_record_objectstring- The object type for the parent record — must be provided with parent_record_id.
workspace_membership_idstring- Filter to notes associated with a specific workspace member.
attiomcp_search_recordsPerform a full-text search for records in a given object across indexed attributes such as domains, email addresses, phone numbers, name/title, description, social handles, and location.Read-onlySearch Records
Perform a full-text search for records in a given object across indexed attributes such as domains, email addresses, phone numbers, name/title, description, social handles, and location. Returns paginated results.
Inputs
objectstringrequired- The object type to search records in, as a slug or UUID.
querystringrequired- Case-insensitive full-text search query across indexed attributes.
limitnumber- Maximum number of results to return.default
10 offsetnumber- Number of results to skip for pagination.default
0
attiomcp_semantic_search_call_recordingsSearch all call recordings using semantic similarity to find calls where specific topics were discussed, even if exact keywords are not present in the transcript.Read-onlySemantic Search Call Recordings
Search all call recordings using semantic similarity to find calls where specific topics were discussed, even if exact keywords are not present in the transcript. Searches both transcript content and call recording overviews (title and summary) using vector embeddings.
Inputs
querystringrequired- The search query to find semantically similar call recordings.
attiomcp_semantic_search_emailsSearch emails visible to the user using semantic similarity to find emails where specific topics were discussed, even if the exact keywords are not present.Read-onlySemantic Search Emails
Search emails visible to the user using semantic similarity to find emails where specific topics were discussed, even if the exact keywords are not present. Returns up to 20 email metadata results; use get-email-content to retrieve full email bodies.
Inputs
querystringrequired- The search query for semantic/content-based search. example: meeting notes from last quarter
exclude_automated_participantsboolean- If true, only return emails with at least one external participant that looks like a person rather than an automated sender (notifications@, no-reply@, meeting notetakers). Defaults to false, which returns every email regardless of sender.
example: falsedefault
false include_emails_of_othersboolean- If true, search through emails of other workspace members as well. If false, only search through the user's own mailbox.
example: falsedefault
false
attiomcp_semantic_search_notesSearch all notes in the workspace using semantic similarity to find notes where specific topics were discussed, even if exact keywords are not present.Read-onlySemantic Search Notes
Search all notes in the workspace using semantic similarity to find notes where specific topics were discussed, even if exact keywords are not present. Returns up to 20 note metadata results; use get-note-body to retrieve the full content of a note.
Inputs
querystringrequired- The search query to find semantically similar notes.
attiomcp_whoamiReturns information about the current user's identity and workspace membership, including their email, name, workspace member ID, access level, and workspace name.Read-onlyWho Am I
Returns information about the current user's identity and workspace membership, including their email, name, workspace member ID, access level, and workspace name.
Inputs
This tool takes no inputs.
attiomcp_add_record_to_listAdds a record to a list as a new list entry.WriteAdd Record to List
Adds a record to a list as a new list entry. By default, duplicate entries are prevented; set allow_duplicates to true to create multiple entries for the same record.
Inputs
liststringrequired- The ID or slug of the list to add the entry to.
parent_objectstringrequired- The object type of the parent record being added to the list.
parent_record_idstringrequired- The ID of the record to add to the list.
allow_duplicatesboolean- Whether to allow adding a record that already exists in the list.default
false entry_valuesobject- Optional attribute values for the list entry keyed by api_slug or attribute_id.
attiomcp_create_activity_recordCreate a new record for a given activity, for example one specific phone call.WriteCreate Activity Record
Create a new record for a given activity, for example one specific phone call. IMPORTANT: Before calling this tool, you should call list-activity-attribute-definitions for the target activity to understand which attributes are available, their types, whether they are required, and (for select/status fields) the valid options. Different attribute types require different value formats - see the 'values' parameter description for details.
Inputs
activitystringrequired- The ID or slug of the activity to create the record for. format: slug or UUID examples: "phone_calls" or "97052eb9-e65e-443f-a297-f2d9a4a7f795"
valuesobjectrequired- An object mapping attribute slugs or IDs to values. Use `api_slug` or `attribute_id` from `list-activity-attribute-definitions` as the key. # VALUE FORMATS BY ATTRIBUTE TYPE: * text: String - "name": "Acme Corp" * number: Number - "employee_count": 100 * checkbox: Boolean - "is_active": true * date: ISO 8601 date - "founded_date": "2024-01-15" * timestamp: ISO 8601 datetime - "created_at": "2024-01-15T10:30:00Z" * rating: Number 0-5 - "priority": 3 * email_address: String or array of strings (depends on is_multiselect) - "email_addresses": ["alice@example.com"] * phone_number: String or array of strings (depends on is_multiselect) - "phone_numbers": ["+14155551234"] * domain: String or array of strings (depends on is_multiselect) - "domains": ["example.com", "attio.com"] * select: Option title or UUID - "industry": "Software" * status: Status title or UUID - "stage": "In Progress" * currency: Number (uses attribute's configured currency) - "deal_value": 10000 * location: Address string - "address": "1 Infinite Loop, Cupertino, CA, 95014, US" Or object - {"line_1": "1 Infinite Loop", "locality": "Cupertino", "region": "CA", "postcode": "95014", "country_code": "US", "latitude": "37.331741", "longitude": "-122.030333"} * personal_name: "Lastname, Firstname" format (note: last name comes FIRST) - "contact_name": "Doe, John" Or object with ALL THREE required fields: [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}] * actor_reference: Workspace member by email or UUID - "owner": "user@example.com" * interaction: NOT WRITABLE - this attribute type cannot be set via the API ## RECORD REFERENCES (linking to other records): Record reference attributes link to records in other objects (e.g., linking a deal to a company). Formats supported: 1. By record ID: {"target_object": "companies", "target_record_id": "<uuid>"} 2. By matching attribute (must contain exactly ONE matching value): {"target_object": "people", "email_addresses": [{"email_address": "alice@example.com"}]} The key (e.g. "email_addresses") is an attribute slug on the target object. 3. Simple format (only if attribute references a single object type): - For people: pass an email address - "contact": "alice@example.com" (matches by email) - For companies: pass a domain - "company": "acme.com" (matches by domain) - Otherwise: pass a record UUID - "related_record": "<uuid>" If the attribute is reported with "supports_all_objects": true, it accepts a record in any object, and the simple format is rejected. Use format 1 or 2 and set "target_object" explicitly. ## ARRAYS VS SINGLE VALUES: For attributes with is_multiselect=true, always provide an array. For single-value attributes, you can use either format: "name": "value" or "name": ["value"] example: {"actor_reference_by_id":"31abd9d6-667f-4240-b995-717be5ad126e","actor_reference_by_email":"user@example.com","checkbox":true,"currency":13.37,"date":"2012-12-12","domain":["example.com","sub.example.com"],"email_address":["hello@example.com"],"location_simple_format":"1 Infinite Loop, Cupertino, CA, 95014, US","location_object_format":{"line_1":"1 Infinite Loop","locality":"Cupertino","region":"CA","postcode":"95014","country_code":"US","latitude":"37.331741","longitude":"-122.030333"},"number":1337,"personal_name_simple_format":"Smith, John","personal_name_object_format":{"first_name":"John","last_name":"Smith","full_name":"John Owen Smith"},"rating":3,"rating_min":0,"rating_max":5,"record_reference_by_id":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}],"record_reference_by_value":[{"target_object":"people","email_addresses":[{"email_address":"test@example.com"}]}],"select":"Select option 1","select_multiselect":["Select option 1","Select option 2"],"text":"Text value","timestamp":"2012-12-12T12:12:121Z","0d8b41a6-9629-40cf-9724-69af2721c8bc":"Example text value attribute referenced by ID","name":"Acme Corp","industry":"Software","employee_count":100,"primary_contact":"Doe, John","email_addresses":["contact@acme.com"],"associated_company":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}]}
attiomcp_create_commentCreates a new comment on a record, list entry, or as a reply to an existing comment thread.WriteCreate Comment
Creates a new comment on a record, list entry, or as a reply to an existing comment thread. Provide exactly one of: parent_object + parent_record_id for records, parent_list + parent_entry_id for list entries, or parent_comment_id for replies.
Inputs
contentstringrequired- The comment text; email addresses are auto-converted to @mentions if they match workspace members.
parent_comment_idstring- The ID of the parent comment to reply to; must be a top-level comment, not a reply.
parent_entry_idstring- The entry ID to comment on; must be provided with parent_list.
parent_liststring- The list the entry belongs to; must be provided with parent_entry_id.
parent_objectstring- The object the record belongs to; must be provided with parent_record_id.
parent_record_idstring- The record ID to comment on; must be provided with parent_object.
attiomcp_create_listCreates a new list in Attio.WriteCreate List
Creates a new list in Attio. Lists are used to group and track records of a single object type (e.g. a sales pipeline of companies). The list is created without any views. Records can be added to the list with the add-record-to-list tool, and attributes specific to the list can be inspected with the list-list-attribute-definitions tool. Permissions are controlled with workspace_access and workspace_member_access. The calling workspace member is automatically granted full access to the created list and does not need to be included in workspace_member_access. If they are included, their given level applies instead, so some workspace member must then keep full access to the list. Returns the created list's ID.
Inputs
api_slugstringrequired- A unique slug to access the list through API calls. Must be formatted in snake_case. example: "enterprise_sales"
namestringrequired- The human-readable name of the list. example: "Enterprise Sales"
parent_objectstringrequired- The object whose records can be added to this list. format: slug or UUID examples: "people" or "companies" or "492c42ea-4def-4e51-9d1b-9ce24fc9e57f"
workspace_accessstringrequired- The level of access granted to all members of the workspace for this list. Pass null to keep the list private and only grant access to the workspace members listed in workspace_member_access. The creator of the list is always granted full access automatically, regardless of this value. examples: "full-access" or "read-and-write" or "read-only" or null
workspace_member_accessarrayrequired- The level of access granted to specific workspace members for this list. Pass an empty array to grant access to no additional workspace members. The creator of the list does not need to be included and is granted full access automatically.
attiomcp_create_noteCreates a new note attached to a record and returns the created note's ID.WriteCreate Note
Creates a new note attached to a record and returns the created note's ID. The note body supports Markdown formatting including headings, lists, bold, italic, and links.
Inputs
contentstringrequired- The body of the note in Markdown format.
parent_objectstringrequired- The object type for the parent record.
parent_record_idstringrequired- The record ID to attach the note to.
titlestringrequired- The title of the note.
meeting_idstring- Optional ID to link this note to a specific meeting.
attiomcp_create_recordCreates a new record in a specified object such as people, companies, or deals.WriteCreate Record
Creates a new record in a specified object such as people, companies, or deals. Before calling this tool, use list-attribute-definitions for the target object to understand available attributes and their required value formats.
Inputs
objectstringrequired- The ID or slug of the object to create the record in.
valuesobjectrequired- An object mapping attribute slugs or IDs to their values for the new record.
attiomcp_create_taskCreates a new task in Attio with optional deadline, assignee, and linked record.WriteCreate Task
Creates a new task in Attio with optional deadline, assignee, and linked record. Returns the created task's ID.
Inputs
contentstringrequired- The text content of the task.
assignee_workspace_member_idstring- The workspace member ID to assign the task to.
deadline_atstring- The deadline date for the task as an ISO 8601 UTC timestamp.
is_completedboolean- Whether the task is completed; defaults to false.default
false linked_record_idstring- The record ID to link the task to; must be provided with linked_record_object.
linked_record_objectstring- The object type for the linked record; must be provided with linked_record_id.
attiomcp_update_activity_recordUse this tool to update activity records, such as phone calls or meetings, by `record_id`.WriteUpdate Activity Record
Use this tool to update activity records, such as phone calls or meetings, by `record_id`.
Inputs
activitystringrequired- The activity that the target record belongs to. format: slug or UUID examples: "phone_calls" or "97052eb9-e65e-443f-a297-f2d9a4a7f795"
record_idstringrequired- A UUID of the activity record to update. example: ad27ac5f-95ab-4cc6-8880-e2655a1aae69
valuesobjectrequired- An object mapping attribute slugs or IDs to values. Use `api_slug` or `attribute_id` from `list-activity-attribute-definitions` as the key. # VALUE FORMATS BY ATTRIBUTE TYPE: * text: String - "name": "Acme Corp" * number: Number - "employee_count": 100 * checkbox: Boolean - "is_active": true * date: ISO 8601 date - "founded_date": "2024-01-15" * timestamp: ISO 8601 datetime - "created_at": "2024-01-15T10:30:00Z" * rating: Number 0-5 - "priority": 3 * email_address: String or array of strings (depends on is_multiselect) - "email_addresses": ["alice@example.com"] * phone_number: String or array of strings (depends on is_multiselect) - "phone_numbers": ["+14155551234"] * domain: String or array of strings (depends on is_multiselect) - "domains": ["example.com", "attio.com"] * select: Option title or UUID - "industry": "Software" * status: Status title or UUID - "stage": "In Progress" * currency: Number (uses attribute's configured currency) - "deal_value": 10000 * location: Address string - "address": "1 Infinite Loop, Cupertino, CA, 95014, US" Or object - {"line_1": "1 Infinite Loop", "locality": "Cupertino", "region": "CA", "postcode": "95014", "country_code": "US", "latitude": "37.331741", "longitude": "-122.030333"} * personal_name: "Lastname, Firstname" format (note: last name comes FIRST) - "contact_name": "Doe, John" Or object with ALL THREE required fields: [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}] * actor_reference: Workspace member by email or UUID - "owner": "user@example.com" * interaction: NOT WRITABLE - this attribute type cannot be set via the API ## RECORD REFERENCES (linking to other records): Record reference attributes link to records in other objects (e.g., linking a deal to a company). Formats supported: 1. By record ID: {"target_object": "companies", "target_record_id": "<uuid>"} 2. By matching attribute (must contain exactly ONE matching value): {"target_object": "people", "email_addresses": [{"email_address": "alice@example.com"}]} The key (e.g. "email_addresses") is an attribute slug on the target object. 3. Simple format (only if attribute references a single object type): - For people: pass an email address - "contact": "alice@example.com" (matches by email) - For companies: pass a domain - "company": "acme.com" (matches by domain) - Otherwise: pass a record UUID - "related_record": "<uuid>" If the attribute is reported with "supports_all_objects": true, it accepts a record in any object, and the simple format is rejected. Use format 1 or 2 and set "target_object" explicitly. ## ARRAYS VS SINGLE VALUES: For attributes with is_multiselect=true, always provide an array. For single-value attributes, you can use either format: "name": "value" or "name": ["value"] example: {"actor_reference_by_id":"31abd9d6-667f-4240-b995-717be5ad126e","actor_reference_by_email":"user@example.com","checkbox":true,"currency":13.37,"date":"2012-12-12","domain":["example.com","sub.example.com"],"email_address":["hello@example.com"],"location_simple_format":"1 Infinite Loop, Cupertino, CA, 95014, US","location_object_format":{"line_1":"1 Infinite Loop","locality":"Cupertino","region":"CA","postcode":"95014","country_code":"US","latitude":"37.331741","longitude":"-122.030333"},"number":1337,"personal_name_simple_format":"Smith, John","personal_name_object_format":{"first_name":"John","last_name":"Smith","full_name":"John Owen Smith"},"rating":3,"rating_min":0,"rating_max":5,"record_reference_by_id":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}],"record_reference_by_value":[{"target_object":"people","email_addresses":[{"email_address":"test@example.com"}]}],"select":"Select option 1","select_multiselect":["Select option 1","Select option 2"],"text":"Text value","timestamp":"2012-12-12T12:12:121Z","0d8b41a6-9629-40cf-9724-69af2721c8bc":"Example text value attribute referenced by ID","name":"Acme Corp","industry":"Software","employee_count":100,"primary_contact":"Doe, John","email_addresses":["contact@acme.com"],"associated_company":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}]}
patch_multiselect_valuesboolean- If `true`, values provided for multiselect attributes will be created and prepended to the list of values that already exist (if any). If `false`, values provied for multiselect attributes will be either created or deleted as necessary to match the list of supplied values. Defaults to `true`.default
true
attiomcp_update_listUpdate the name or API slug of a list.WriteUpdate List
Update the name or API slug of a list. At least one of name or api_slug must be provided.
- Idempotent
Inputs
liststringrequired- The ID or slug of the list to update. format: slug or UUID examples: "sales_pipeline" or "9c3a6765-a97f-4eec-a01a-f48b3dd89ec7"
api_slugstring- The new API slug for the list. Must be formatted in snake_case. example: "enterprise_sales"
namestring- The new human-readable name of the list. example: "Enterprise Sales"
workspace_accessstring- The new level of access granted to all members of the workspace for this list. Omit to keep the current level. Pass null to remove workspace-wide access and keep the list private to the workspace members listed in workspace_member_access. WARNING: raising this level makes the list and all of its data visible to every member of the workspace. examples: "full-access" or "read-and-write" or "read-only" or null
workspace_member_accessarray- The new level of access granted to specific workspace members for this list. Omit to keep the current member access. When provided, this array replaces the complete set of member-specific access: members that are not included lose their member-specific access. The change is refused when it would leave the list without any workspace member that has full access.
attiomcp_update_list_entry_by_idUpdate attribute values on an existing list entry by its entry ID.WriteUpdate List Entry by ID
Update attribute values on an existing list entry by its entry ID. Call list-records-in-list first to find the entry you want to update.
- Idempotent
Inputs
entry_idstringrequired- The ID of the list entry to update.
entry_valuesobjectrequired- An object mapping attribute slugs or IDs to their new values for the list entry.
liststringrequired- The ID or slug of the list containing the entry.
patch_multiselect_valuesboolean- If true, multiselect attribute values are prepended to existing values. If false, values are replaced to match the supplied list.default
true
attiomcp_update_list_entry_by_record_idUpdate attribute values on a list entry by finding it via its parent record ID.WriteUpdate List Entry by Record ID
Update attribute values on a list entry by finding it via its parent record ID. Errors if the record has zero or multiple entries in the specified list.
- Idempotent
Inputs
entry_valuesobjectrequired- An object mapping attribute slugs or IDs to their new values for the list entry.
liststringrequired- The ID or slug of the list containing the entry.
parent_objectstringrequired- The slug or ID of the object that the parent record belongs to.
parent_record_idstringrequired- The ID of the parent record whose list entry will be updated.
patch_multiselect_valuesboolean- If true, multiselect attribute values are prepended to existing values. If false, values are replaced to match the supplied list.default
true
attiomcp_update_noteAppend or prepend plain-text content to an existing note and optionally update its title.WriteUpdate Note
Append or prepend plain-text content to an existing note and optionally update its title. At least one of operation or updated_title must be provided.
Inputs
note_idstringrequired- The ID of the note to update.
operationstring- Optional content update operation — append adds paragraphs to the end, prepend adds paragraphs to the start.
updated_titlestring- Optional new title for the note.
attiomcp_update_recordUpdate attribute values on a people, companies, or other record by its record ID.WriteUpdate Record
Update attribute values on a people, companies, or other record by its record ID. Call list-attribute-definitions first to discover available attribute slugs and valid value formats.
- Idempotent
Inputs
objectstringrequired- The object type for the target record.
record_idstringrequired- The UUID of the record to update.
valuesobjectrequired- An object mapping attribute slugs or IDs to their new values.
patch_multiselect_valuesboolean- If true, multiselect attribute values are prepended to existing values. If false, values are replaced to match the supplied list.default
true
attiomcp_update_taskUpdate an existing task's deadline, completion status, assignee, or linked record.WriteUpdate Task
Update an existing task's deadline, completion status, assignee, or linked record. Set deadline_at to null to clear the deadline.
- Idempotent
Inputs
task_idstringrequired- The ID of the task to update.
assignee_workspace_member_idstring- The workspace member ID to assign the task to.
deadline_atstring- The new deadline date for the task as an ISO 8601 timestamp. Set to null to clear the deadline.
is_completedboolean- Whether the task is completed.
linked_record_idstring- The record ID to link the task to. Must be provided with linked_record_object.
linked_record_objectstring- The object type for the linked record. Must be provided with linked_record_id.
attiomcp_upsert_activity_recordUse this tool to create or update activity records, such as phone calls or meetings.WriteUpsert Activity Record
Use this tool to create or update activity records, such as phone calls or meetings. A matching attribute is used to search for existing activity records. If a record is found with the same value for the `matching_attribute`, that record will be updated. If no record with the same value for the `matching_attribute` is found, a new record will be created instead. If the matching attribute is a multiselect attribute, new values will be added and existing values will not be deleted. The `matching_attribute` must be a unique attribute of the activity. Use the `list-activity-attribute-definitions` tool to find one. If you would like to avoid matching, please use the `create-activity-record` tool.
Inputs
activitystringrequired- The activity that the target record belongs to. format: slug or UUID examples: "phone_calls" or "97052eb9-e65e-443f-a297-f2d9a4a7f795"
matching_attributestringrequired- The ID or slug of the attribute to use to check if an activity record already exists. The attribute must be unique. The value for `matching_attribute` MUST be provided in the `values` payload. examples: "external_id" or "0d8b41a6-9629-40cf-9724-69af2721c8bc"
valuesobjectrequired- An object mapping attribute slugs or IDs to values. Use `api_slug` or `attribute_id` from `list-activity-attribute-definitions` as the key. # VALUE FORMATS BY ATTRIBUTE TYPE: * text: String - "name": "Acme Corp" * number: Number - "employee_count": 100 * checkbox: Boolean - "is_active": true * date: ISO 8601 date - "founded_date": "2024-01-15" * timestamp: ISO 8601 datetime - "created_at": "2024-01-15T10:30:00Z" * rating: Number 0-5 - "priority": 3 * email_address: String or array of strings (depends on is_multiselect) - "email_addresses": ["alice@example.com"] * phone_number: String or array of strings (depends on is_multiselect) - "phone_numbers": ["+14155551234"] * domain: String or array of strings (depends on is_multiselect) - "domains": ["example.com", "attio.com"] * select: Option title or UUID - "industry": "Software" * status: Status title or UUID - "stage": "In Progress" * currency: Number (uses attribute's configured currency) - "deal_value": 10000 * location: Address string - "address": "1 Infinite Loop, Cupertino, CA, 95014, US" Or object - {"line_1": "1 Infinite Loop", "locality": "Cupertino", "region": "CA", "postcode": "95014", "country_code": "US", "latitude": "37.331741", "longitude": "-122.030333"} * personal_name: "Lastname, Firstname" format (note: last name comes FIRST) - "contact_name": "Doe, John" Or object with ALL THREE required fields: [{"first_name": "John", "last_name": "Doe", "full_name": "John Doe"}] * actor_reference: Workspace member by email or UUID - "owner": "user@example.com" * interaction: NOT WRITABLE - this attribute type cannot be set via the API ## RECORD REFERENCES (linking to other records): Record reference attributes link to records in other objects (e.g., linking a deal to a company). Formats supported: 1. By record ID: {"target_object": "companies", "target_record_id": "<uuid>"} 2. By matching attribute (must contain exactly ONE matching value): {"target_object": "people", "email_addresses": [{"email_address": "alice@example.com"}]} The key (e.g. "email_addresses") is an attribute slug on the target object. 3. Simple format (only if attribute references a single object type): - For people: pass an email address - "contact": "alice@example.com" (matches by email) - For companies: pass a domain - "company": "acme.com" (matches by domain) - Otherwise: pass a record UUID - "related_record": "<uuid>" If the attribute is reported with "supports_all_objects": true, it accepts a record in any object, and the simple format is rejected. Use format 1 or 2 and set "target_object" explicitly. ## ARRAYS VS SINGLE VALUES: For attributes with is_multiselect=true, always provide an array. For single-value attributes, you can use either format: "name": "value" or "name": ["value"] example: {"actor_reference_by_id":"31abd9d6-667f-4240-b995-717be5ad126e","actor_reference_by_email":"user@example.com","checkbox":true,"currency":13.37,"date":"2012-12-12","domain":["example.com","sub.example.com"],"email_address":["hello@example.com"],"location_simple_format":"1 Infinite Loop, Cupertino, CA, 95014, US","location_object_format":{"line_1":"1 Infinite Loop","locality":"Cupertino","region":"CA","postcode":"95014","country_code":"US","latitude":"37.331741","longitude":"-122.030333"},"number":1337,"personal_name_simple_format":"Smith, John","personal_name_object_format":{"first_name":"John","last_name":"Smith","full_name":"John Owen Smith"},"rating":3,"rating_min":0,"rating_max":5,"record_reference_by_id":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}],"record_reference_by_value":[{"target_object":"people","email_addresses":[{"email_address":"test@example.com"}]}],"select":"Select option 1","select_multiselect":["Select option 1","Select option 2"],"text":"Text value","timestamp":"2012-12-12T12:12:121Z","0d8b41a6-9629-40cf-9724-69af2721c8bc":"Example text value attribute referenced by ID","name":"Acme Corp","industry":"Software","employee_count":100,"primary_contact":"Doe, John","email_addresses":["contact@acme.com"],"associated_company":[{"target_object":"companies","target_record_id":"46cc9100-e0f0-4ca9-ac14-138cfe38de67"}]}
patch_multiselect_valuesboolean- If `true`, values provided for multiselect attributes will be created and prepended to the list of values that already exist (if any). If `false`, values provided for multiselect attributes will be either created or deleted as necessary to match the list of supplied values. Defaults to `true`.default
true
attiomcp_upsert_recordCreate or update a people, companies, or other record using a matching attribute to find an existing record.WriteUpsert Record
Create or update a people, companies, or other record using a matching attribute to find an existing record. If a record with the same matching attribute value exists it is updated; otherwise a new record is created.
- Idempotent
Inputs
matching_attributestringrequired- The slug or ID of the unique attribute used to search for an existing record.
objectstringrequired- The object type for the target record.
valuesobjectrequired- An object mapping attribute slugs or IDs to values. Must include a value for the matching_attribute.
patch_multiselect_valuesboolean- If true, multiselect attribute values are prepended to existing values. If false, values are replaced to match the supplied list.default
true
attiomcp_delete_commentDeletes a comment you created.DestructiveDelete Comment
Deletes a comment you created. Deleting a parent comment will also delete all of its replies.
Inputs
comment_idstringrequired- The ID of the comment to delete.
attiomcp_delete_taskDeletes a task.DestructiveDelete Task
Deletes a task. Call list-tasks to find the ID of the task you want to delete.
Inputs
task_idstringrequired- The ID of the task to delete. example: 5d6bb204-491e-4ae6-9c63-1a6cd99af947
attiomcp_merge_recordsMerge two records of the same object into one.DestructiveMerge Records
Merge two records of the same object into one. The primary record is kept and takes precedence for any attribute both records have a value for; the secondary record's values are only kept where the primary record has no value for that attribute. The secondary record is removed as part of the merge.
Inputs
objectstringrequired- The object both records belong to.
primary_record_idstringrequired- The record to keep values from. Where both records have a value for the same attribute, the primary record's value takes precedence.
secondary_record_idstringrequired- The record to merge into the primary record. Its values are only kept where the primary record has no value for that attribute.
No tools match.