Attio
Query, create and update Attio records and list entries, and work with notes, tasks, comments, meetings, call recordings, files and webhooks. Connect with an Attio access token.
- rest
https://api.superagnt.com/v1/connections/attioplus the vendor's own path, with your superagnt_ API key asAuthorization: Bearer.- mcp
- Tools named
connection_attio_*onhttps://mcp.superagnt.com/mcp, served once the account is connected. - billing
- Attio bills your own account. Calls cost no superagnt_ data credits.
- rate limit
- 100 requests a second, 6,000 a minute: the vendor's ceiling as the registry records it, for sizing bursts. Your plan's own limit is on Connections.
- vendor docs
- https://developers.attio.com
The Attio connection lets an agent work your Attio CRM. It queries and searches records of any object (people, companies, deals and custom objects), creates, upserts and updates them, adds records to lists, reads and changes objects, lists, attributes, select options and statuses, writes notes, tasks and comments, logs meetings and their call recordings, manages files on records, and registers webhooks.
01
Setup
- Create an access token. In your Attio workspace settings, create an access token with the scopes your agents need, read or read-write.
- Connect Attio. In the superagnt app open Integrations, pick Attio, paste the token into API key and press Connect.
Records need record_permission and object_configuration, list entries need list_entry and list_configuration, and workspace members (and tasks) need user_management. Notes, tasks, comments, meetings, call recordings, files and webhooks each have a scope of their own (note, task, comment, meeting, call_recording, file, webhook). connection_attio_workspace_read action identify shows the workspace the token belongs to and the scopes it carries.
02
Things to know
- An object is named by its slug or id:
people,companies,deals, or a custom object'sapi_slug. Lists take a list'sapi_slugor id. - Record writes send
data.values, keyed by attributeapi_slugor id.connection_attio_attributes_readlists an object's attributes with the slug and type each value needs. - On
connection_attio_records_write,updateadds to multiselect values andoverwritereplaces them. upsertmatches on a unique attribute you name inmatching_attribute, such asdomainson companies oremail_addresseson people. It updates the match, or creates a record when there is none.querytakes afilterin Attio's filter syntax ($and,$or, operators such as$contains) andsorts. It returns up tolimitrecords (500 by default) and pages withoffset.searchis a fuzzy match across theobjectsyou list (at least one), up to 25 results: names, domains, emails, phone numbers and social handles on people and companies, and labels on other objects. Its results can lag behind recent changes: usequerywhen they must be current.- A list entry carries the list's own attribute values. Removing a record from a list deletes the entry and keeps the record.
- Deleting a thread's first comment deletes the whole thread.
- A webhook's
secret, which signs its events, appears only in the response that creates the webhook. Keep it then. - Every delete always asks a person first by default, and SCIM user and group changes ask. Everything else runs without asking (Permissions).
03
Examples
Check the token
curl "https://api.superagnt.com/v1/connections/attio/v2/self" \
-H "Authorization: Bearer $AGNTDATA_API_KEY"Query people
curl -X POST "https://api.superagnt.com/v1/connections/attio/v2/objects/people/records/query" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filter": {"name": "Ada Lovelace"}, "limit": 10}'Upsert a company by domain
curl -X PUT "https://api.superagnt.com/v1/connections/attio/v2/objects/companies/records?matching_attribute=domains" \
-H "Authorization: Bearer $AGNTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"data": {
"values": {
"domains": [{"domain": "example.com"}],
"name": "Example Inc"
}
}
}'38 tools, one per resource and risk
MCP servers and agents on the grouped surface list Attio as these tools. Each takes an action, and the ones that work across record types an object. Every operation also keeps its own per-operation name, in the next table, which works on every server. How grouping works: Grouped tools.
| Tool | Risk | Actions |
|---|---|---|
connection_attio_records_readFind and read Attio records Find and read records of any Attio object (people, companies, deals, or a custom object by api_slug): query one object with a filter such as { "name": "Ada Lovelace" } (Attio filter syntax, with $and, $or and operators such as $contains), fuzzy-search across objects, get a record, read one attribute's values, or list the list entries a record has. | read | querysearchgetattribute_valueslist_entries |
connection_attio_records_writeCreate and update Attio records Create, upsert or update a record of any Attio object (people, companies, deals, or a custom object by api_slug). Every action takes object and data: { "values": { <attribute api_slug or id>: value or [values] } }; read an object's attributes with connection_attio_attributes_read. | write | createupsertupdateoverwrite |
connection_attio_records_deleteDelete an Attio record Permanently delete a record of any Attio object. object takes an api_slug or id. | destructive | delete |
connection_attio_entries_readRead Attio list entries Read the entries of an Attio list (the records added to it, with the list's own attribute values): query a list with a filter and sorts, get one entry, or read one entry attribute's values. list is the list's api_slug or id. | read | querygetattribute_values |
connection_attio_entries_writeAdd records to Attio lists Add a record to an Attio list (list is its api_slug or id), or update a list entry's values. add and upsert take data: { "parent_record_id", "parent_object", "entry_values": { <attribute api_slug>: value } }; update and overwrite take data: { "entry_values" } for one entry_id. | write | addupsertupdateoverwrite |
connection_attio_entries_deleteRemove a record from an Attio list Remove a record from a list by deleting its entry; the record itself is kept. list takes an api_slug or id. | destructive | delete |
connection_attio_objects_readRead Attio objects List and get the workspace's objects (people, companies, deals and custom objects), and the saved views of one. | read | listgetlist_views |
connection_attio_objects_writeCreate and update Attio objects Create a custom object, or change an object's api_slug or nouns. | write | createupdate |
connection_attio_lists_readRead Attio lists List and get the workspace's lists, and the saved views of one. | read | listgetlist_views |
connection_attio_lists_writeCreate and update Attio lists Create a list of one object's records, or change its name, api_slug or access. | write | createupdate |
connection_attio_attributes_readRead Attio attributes List and get the attributes of an object or list: the api_slug and type each value needs. target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | read | listget |
connection_attio_attributes_writeCreate and update Attio attributes Add an attribute to an object or list, or change one (an update also takes is_archived). target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | write | createupdate |
connection_attio_select_options_readRead Attio select options List the options of a select attribute. target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | read | list |
connection_attio_select_options_writeAdd and update Attio select options Add an option to a select attribute, or rename or archive one. target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | write | createupdate |
connection_attio_statuses_readRead Attio statuses List the statuses of a status attribute (a deal stage, say). target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | read | list |
connection_attio_statuses_writeAdd and update Attio statuses Add a status to a status attribute, or change or archive one. target is "objects" or "lists"; identifier is that object's or list's api_slug or id. | write | createupdate |
connection_attio_workspace_readRead Attio workspace members List or get the workspace's members (their ids are what task assignees, comment authors and list access take), or identify the connected token, its workspace and scopes. | read | list_membersget_memberidentify |
connection_attio_notes_readRead Attio notes List notes (all, or those on one record), or get one. | read | listget |
connection_attio_notes_writeCreate an Attio note Create a note on a record, in plaintext or markdown. | write | create |
connection_attio_notes_deleteDelete an Attio note Permanently delete a note. | destructive | delete |
connection_attio_tasks_readRead Attio tasks List tasks (by linked record, assignee or completion), or get one. | read | listget |
connection_attio_tasks_writeCreate and update Attio tasks Create a task, or change its deadline, completion, linked records or assignees. Assignees are [{ "referenced_actor_type": "workspace-member", "referenced_actor_id" }]; linked_records are [{ "target_object", "target_record_id" }]. | write | createupdate |
connection_attio_tasks_deleteDelete an Attio task Permanently delete a task. | destructive | delete |
connection_attio_threads_readRead Attio comment threads List the comment threads on a record or list entry, or get one with its comments. | read | listget |
connection_attio_comments_readRead an Attio comment Get one comment. | read | get |
connection_attio_comments_writeComment in Attio Comment on a record, a list entry or a thread. The author is { "type": "workspace-member", "id" }; a record is { "object", "record_id" }, an entry { "list", "entry_id" }. | write | create |
connection_attio_comments_deleteDelete an Attio comment Permanently delete a comment; deleting a thread's first comment deletes the thread. | destructive | delete |
connection_attio_meetings_readRead Attio meetings List meetings (all, or those linked to one record), or get one. | read | listget |
connection_attio_meetings_writeLog an Attio meeting Find or create a meeting, matched on external_ref. | write | find_or_create |
connection_attio_call_recordings_readRead Attio call recordings List and get the call recordings of a meeting, and read a recording's transcript. | read | listgetget_transcript |
connection_attio_call_recordings_writeAttach an Attio call recording Attach a call recording to a meeting from a public video URL. | write | create |
connection_attio_call_recordings_deleteDelete an Attio call recording Permanently delete a call recording. | destructive | delete |
connection_attio_files_readRead Attio files List the files and folders on a record, get one, or download it. | read | listgetdownload |
connection_attio_files_writeAdd Attio files Create a folder (or link a file from a connected storage provider) on a record, or upload a file to it. | write | create_folderupload |
connection_attio_files_deleteDelete an Attio file Permanently delete a file, or a folder with its contents. | destructive | delete |
connection_attio_webhooks_readRead Attio webhooks List the workspace's webhooks or get one, with its target URL and event subscriptions. | read | listget |
connection_attio_webhooks_writeCreate and update Attio webhooks Create a webhook, or change its target URL or subscriptions: data is { "target_url": "https://…", "subscriptions": [{ "event_type" (such as "record.created" or "list-entry.updated"), "filter": null or { "$and" or "$or": [{ "field", "operator", "value" }] } }] }. | write | createupdate |
connection_attio_webhooks_deleteDelete an Attio webhook Permanently delete a webhook. | destructive | delete |
All 87 operations
Each operation is a REST path under https://api.superagnt.com/v1/connections/attio and an MCP tool. The per-operation tool name is the one permissions, approvals and usage records use.
| Operation | MCP tool |
|---|---|
GET /v2/objectsList objects | connection_attio_get_v2_objectsgrouped: connection_attio_objects_read, action list |
POST /v2/objectsCreate an object | connection_attio_post_v2_objectsgrouped: connection_attio_objects_write, action create |
GET /v2/objects/{object}Get an object | connection_attio_get_v2_objects_object_grouped: connection_attio_objects_read, action get |
PATCH /v2/objects/{object}Update an object | connection_attio_patch_v2_objects_object_grouped: connection_attio_objects_write, action update |
GET /v2/objects/{object}/viewsList views for object | connection_attio_get_v2_objects_object_viewsgrouped: connection_attio_objects_read, action list_views |
GET /v2/{target}/{identifier}/attributesList attributes | connection_attio_get_v2_target_identifier_attributesgrouped: connection_attio_attributes_read, action list |
POST /v2/{target}/{identifier}/attributesCreate an attribute | connection_attio_post_v2_target_identifier_attributesgrouped: connection_attio_attributes_write, action create |
GET /v2/{target}/{identifier}/attributes/{attribute}Get an attribute | connection_attio_get_v2_target_identifier_attributes_attribute_grouped: connection_attio_attributes_read, action get |
PATCH /v2/{target}/{identifier}/attributes/{attribute}Update an attribute | connection_attio_patch_v2_target_identifier_attributes_15e2ead2grouped: connection_attio_attributes_write, action update |
GET /v2/{target}/{identifier}/attributes/{attribute}/optionsList select options | connection_attio_get_v2_target_identifier_attributes_at_cd22e2ebgrouped: connection_attio_select_options_read, action list |
POST /v2/{target}/{identifier}/attributes/{attribute}/optionsCreate a select option | connection_attio_post_v2_target_identifier_attributes_a_b00b2f11grouped: connection_attio_select_options_write, action create |
PATCH /v2/{target}/{identifier}/attributes/{attribute}/options/{option}Update a select option | connection_attio_patch_v2_target_identifier_attributes_cf95d811grouped: connection_attio_select_options_write, action update |
GET /v2/{target}/{identifier}/attributes/{attribute}/statusesList statuses | connection_attio_get_v2_target_identifier_attributes_at_d6fb136bgrouped: connection_attio_statuses_read, action list |
POST /v2/{target}/{identifier}/attributes/{attribute}/statusesCreate a status | connection_attio_post_v2_target_identifier_attributes_a_73694f50grouped: connection_attio_statuses_write, action create |
PATCH /v2/{target}/{identifier}/attributes/{attribute}/statuses/{status}Update a status | connection_attio_patch_v2_target_identifier_attributes_ab1fbab4grouped: connection_attio_statuses_write, action update |
POST /v2/objects/{object}/records/queryList records | connection_attio_post_v2_objects_object_records_querygrouped: connection_attio_records_read, action query |
POST /v2/objects/{object}/recordsCreate a record | connection_attio_post_v2_objects_object_recordsgrouped: connection_attio_records_write, action create |
PUT /v2/objects/{object}/recordsAssert a record | connection_attio_put_v2_objects_object_recordsgrouped: connection_attio_records_write, action upsert |
GET /v2/objects/{object}/records/{record_id}Get a record | connection_attio_get_v2_objects_object_records_record_id_grouped: connection_attio_records_read, action get |
PUT /v2/objects/{object}/records/{record_id}Update a record (overwrite multiselect values) | connection_attio_put_v2_objects_object_records_record_id_grouped: connection_attio_records_write, action overwrite |
PATCH /v2/objects/{object}/records/{record_id}Update a record (append multiselect values) | connection_attio_patch_v2_objects_object_records_record_id_grouped: connection_attio_records_write, action update |
DELETE /v2/objects/{object}/records/{record_id}Delete a record | connection_attio_delete_v2_objects_object_records_record_id_grouped: connection_attio_records_delete, action delete |
GET /v2/objects/{object}/records/{record_id}/attributes/{attribute}/valuesList record attribute values | connection_attio_get_v2_objects_object_records_record_i_acf082e7grouped: connection_attio_records_read, action attribute_values |
GET /v2/objects/{object}/records/{record_id}/entriesList record entries | connection_attio_get_v2_objects_object_records_record_id_entriesgrouped: connection_attio_records_read, action list_entries |
POST /v2/objects/records/searchSearch records | connection_attio_post_v2_objects_records_searchgrouped: connection_attio_records_read, action search |
GET /v2/listsList all lists | connection_attio_get_v2_listsgrouped: connection_attio_lists_read, action list |
POST /v2/listsCreate a list | connection_attio_post_v2_listsgrouped: connection_attio_lists_write, action create |
GET /v2/lists/{list}Get a list | connection_attio_get_v2_lists_list_grouped: connection_attio_lists_read, action get |
PATCH /v2/lists/{list}Update a list | connection_attio_patch_v2_lists_list_grouped: connection_attio_lists_write, action update |
GET /v2/lists/{list}/viewsList views for list | connection_attio_get_v2_lists_list_viewsgrouped: connection_attio_lists_read, action list_views |
POST /v2/lists/{list}/entries/queryList entries | connection_attio_post_v2_lists_list_entries_querygrouped: connection_attio_entries_read, action query |
POST /v2/lists/{list}/entriesCreate an entry (add record to list) | connection_attio_post_v2_lists_list_entriesgrouped: connection_attio_entries_write, action add |
PUT /v2/lists/{list}/entriesAssert a list entry by parent | connection_attio_put_v2_lists_list_entriesgrouped: connection_attio_entries_write, action upsert |
GET /v2/lists/{list}/entries/{entry_id}Get a list entry | connection_attio_get_v2_lists_list_entries_entry_id_grouped: connection_attio_entries_read, action get |
PUT /v2/lists/{list}/entries/{entry_id}Update a list entry (overwrite multiselect values) | connection_attio_put_v2_lists_list_entries_entry_id_grouped: connection_attio_entries_write, action overwrite |
PATCH /v2/lists/{list}/entries/{entry_id}Update a list entry (append multiselect values) | connection_attio_patch_v2_lists_list_entries_entry_id_grouped: connection_attio_entries_write, action update |
DELETE /v2/lists/{list}/entries/{entry_id}Delete a list entry | connection_attio_delete_v2_lists_list_entries_entry_id_grouped: connection_attio_entries_delete, action delete |
GET /v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/valuesList attribute values for a list entry | connection_attio_get_v2_lists_list_entries_entry_id_att_6a1d6ba2grouped: connection_attio_entries_read, action attribute_values |
GET /v2/workspace_membersList workspace members | connection_attio_get_v2_workspace_membersgrouped: connection_attio_workspace_read, action list_members |
GET /v2/workspace_members/{workspace_member_id}Get a workspace member | connection_attio_get_v2_workspace_members_workspace_member_id_grouped: connection_attio_workspace_read, action get_member |
GET /v2/notesList notes | connection_attio_get_v2_notesgrouped: connection_attio_notes_read, action list |
POST /v2/notesCreate a note | connection_attio_post_v2_notesgrouped: connection_attio_notes_write, action create |
GET /v2/notes/{note_id}Get a note | connection_attio_get_v2_notes_note_id_grouped: connection_attio_notes_read, action get |
DELETE /v2/notes/{note_id}Delete a note | connection_attio_delete_v2_notes_note_id_grouped: connection_attio_notes_delete, action delete |
GET /v2/tasksList tasks | connection_attio_get_v2_tasksgrouped: connection_attio_tasks_read, action list |
POST /v2/tasksCreate a task | connection_attio_post_v2_tasksgrouped: connection_attio_tasks_write, action create |
GET /v2/tasks/{task_id}Get a task | connection_attio_get_v2_tasks_task_id_grouped: connection_attio_tasks_read, action get |
PATCH /v2/tasks/{task_id}Update a task | connection_attio_patch_v2_tasks_task_id_grouped: connection_attio_tasks_write, action update |
DELETE /v2/tasks/{task_id}Delete a task | connection_attio_delete_v2_tasks_task_id_grouped: connection_attio_tasks_delete, action delete |
GET /v2/threadsList threads | connection_attio_get_v2_threadsgrouped: connection_attio_threads_read, action list |
GET /v2/threads/{thread_id}Get a thread | connection_attio_get_v2_threads_thread_id_grouped: connection_attio_threads_read, action get |
POST /v2/commentsCreate a comment | connection_attio_post_v2_commentsgrouped: connection_attio_comments_write, action create |
GET /v2/comments/{comment_id}Get a comment | connection_attio_get_v2_comments_comment_id_grouped: connection_attio_comments_read, action get |
DELETE /v2/comments/{comment_id}Delete a comment | connection_attio_delete_v2_comments_comment_id_grouped: connection_attio_comments_delete, action delete |
GET /v2/meetingsList meetings | connection_attio_get_v2_meetingsgrouped: connection_attio_meetings_read, action list |
POST /v2/meetingsFind or create a meeting | connection_attio_post_v2_meetingsgrouped: connection_attio_meetings_write, action find_or_create |
GET /v2/meetings/{meeting_id}Get a meeting | connection_attio_get_v2_meetings_meeting_id_grouped: connection_attio_meetings_read, action get |
GET /v2/meetings/{meeting_id}/call_recordingsList call recordings | connection_attio_get_v2_meetings_meeting_id_call_recordingsgrouped: connection_attio_call_recordings_read, action list |
POST /v2/meetings/{meeting_id}/call_recordingsCreate call recording | connection_attio_post_v2_meetings_meeting_id_call_recordingsgrouped: connection_attio_call_recordings_write, action create |
GET /v2/meetings/{meeting_id}/call_recordings/{call_recording_id}Get call recording | connection_attio_get_v2_meetings_meeting_id_call_record_9b0af06bgrouped: connection_attio_call_recordings_read, action get |
DELETE /v2/meetings/{meeting_id}/call_recordings/{call_recording_id}Delete call recording | connection_attio_delete_v2_meetings_meeting_id_call_rec_14d518d9grouped: connection_attio_call_recordings_delete, action delete |
GET /v2/meetings/{meeting_id}/call_recordings/{call_recording_id}/transcriptGet call transcript | connection_attio_get_v2_meetings_meeting_id_call_record_fad14c7dgrouped: connection_attio_call_recordings_read, action get_transcript |
GET /v2/filesList files | connection_attio_get_v2_filesgrouped: connection_attio_files_read, action list |
POST /v2/filesCreate a folder | connection_attio_post_v2_filesgrouped: connection_attio_files_write, action create_folder |
POST /v2/files/uploadUpload a file | connection_attio_post_v2_files_uploadgrouped: connection_attio_files_write, action upload |
GET /v2/files/{file_id}Get a file | connection_attio_get_v2_files_file_id_grouped: connection_attio_files_read, action get |
DELETE /v2/files/{file_id}Delete a file | connection_attio_delete_v2_files_file_id_grouped: connection_attio_files_delete, action delete |
GET /v2/files/{file_id}/downloadDownload a file | connection_attio_get_v2_files_file_id_downloadgrouped: connection_attio_files_read, action download |
GET /scim/v2/SchemasList SCIM schemas | connection_attio_get_scim_v2_schemasnot listed on grouped servers; call it by this name |
GET /scim/v2/UsersList SCIM users | connection_attio_get_scim_v2_usersnot listed on grouped servers; call it by this name |
POST /scim/v2/UsersCreate SCIM user | connection_attio_post_scim_v2_usersnot listed on grouped servers; call it by this name |
GET /scim/v2/GroupsList SCIM groups | connection_attio_get_scim_v2_groupsnot listed on grouped servers; call it by this name |
POST /scim/v2/GroupsCreate SCIM group | connection_attio_post_scim_v2_groupsnot listed on grouped servers; call it by this name |
GET /scim/v2/Users/{user_id}Get SCIM user | connection_attio_get_scim_v2_users_user_id_not listed on grouped servers; call it by this name |
PUT /scim/v2/Users/{user_id}Update SCIM user | connection_attio_put_scim_v2_users_user_id_not listed on grouped servers; call it by this name |
PATCH /scim/v2/Users/{user_id}Patch SCIM user | connection_attio_patch_scim_v2_users_user_id_not listed on grouped servers; call it by this name |
DELETE /scim/v2/Users/{user_id}Delete SCIM user | connection_attio_delete_scim_v2_users_user_id_not listed on grouped servers; call it by this name |
GET /scim/v2/Groups/{workspace_team_id}Get SCIM group | connection_attio_get_scim_v2_groups_workspace_team_id_not listed on grouped servers; call it by this name |
PUT /scim/v2/Groups/{workspace_team_id}Update SCIM group | connection_attio_put_scim_v2_groups_workspace_team_id_not listed on grouped servers; call it by this name |
PATCH /scim/v2/Groups/{workspace_team_id}Patch SCIM group | connection_attio_patch_scim_v2_groups_workspace_team_id_not listed on grouped servers; call it by this name |
DELETE /scim/v2/Groups/{workspace_team_id}Delete SCIM group | connection_attio_delete_scim_v2_groups_workspace_team_id_not listed on grouped servers; call it by this name |
GET /v2/webhooksList webhooks | connection_attio_get_v2_webhooksgrouped: connection_attio_webhooks_read, action list |
POST /v2/webhooksCreate a webhook | connection_attio_post_v2_webhooksgrouped: connection_attio_webhooks_write, action create |
GET /v2/webhooks/{webhook_id}Get a webhook | connection_attio_get_v2_webhooks_webhook_id_grouped: connection_attio_webhooks_read, action get |
PATCH /v2/webhooks/{webhook_id}Update a webhook | connection_attio_patch_v2_webhooks_webhook_id_grouped: connection_attio_webhooks_write, action update |
DELETE /v2/webhooks/{webhook_id}Delete a webhook | connection_attio_delete_v2_webhooks_webhook_id_grouped: connection_attio_webhooks_delete, action delete |
GET /v2/selfIdentify | connection_attio_get_v2_selfgrouped: connection_attio_workspace_read, action identify |