Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Attio MCP Server

NPM · ATTIO-MCP · SCANNED SEP 20

AI-powered Attio CRM access. Manage contacts, companies, deals, tasks, notes and workflows.

Available components

0 this week 92 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security92
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs a script at install time (postinstall) that we could not recognise. It may be perfectly ordinary, but we do not read the published tarball, so we cannot say what it does. View diagnostics → Partial
  • 54 of 166 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to kesslerio/attio-mcp-server). View diagnostics → Pass
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 25 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8811 tokens (~200/item across 44 items; 44 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Tools include usage examples.Pass
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety90
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 3 of 5 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "batch_search_records" implies "execute" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
  • An AI judge read all 44 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Attio MCP Server server?

Attio MCP Server runs locally as an npm package, launched with npx -y attio-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · attio-mcp

# add to Claude Code
claude mcp add kesslerio-attio-mcp-server -- npx -y attio-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "kesslerio-attio-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "attio-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "kesslerio-attio-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "attio-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add kesslerio-attio-mcp-server -- npx -y attio-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "kesslerio-attio-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "attio-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add kesslerio-attio-mcp-server --command npx --arg -y --arg attio-mcp
# ~/.hermes/config.yaml
mcp_servers:
  kesslerio-attio-mcp-server:
    command: "npx"
    args: ["-y", "attio-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "kesslerio-attio-mcp-server": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "attio-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add kesslerio-attio-mcp-server -t stdio -c npx -a -y attio-mcp
// mcp.json
{
  "mcpServers": {
    "kesslerio-attio-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "attio-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 16 Sept 26 +1
    • Stability: 0.97 → pass security
  • 14 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 −3
    • Stability: pass → 0.80 functional
  • 9 Sept 26 +1
    • Stability: 0.97 → pass security
  • 7 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/attio-mcp@1.7.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo kesslerio/attio-mcp-server
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/kesslerio/attio-mcp-server/.github/workflows/publish-mcp-registry.yml@refs/tags/v1.7.0
Rekor log index 2590416957
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:17c2c0becd3a9a5b97a241719c45f9b82b5cb9bb28a3f722e09f0904b91d26ade6bb6035206f852c80b5270f84f3aebfbec1854419ce33f247db19372

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
postinstall unreviewed [ -d .git ] && husky || echo 'Skipping git hooks setup (not a git repository)'

Background: Why install scripts are a supply-chain risk →

Dependencies 166 packages
Packages resolved 166
Stale 54
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 44 exposed · ~8,811 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
aaa-health-check ~61

Run a lightweight health probe that echoes deployment metadata. Never query Attio APIs, mutate data, or require credentials. Accepts optional echo text; returns JSON payload as text for MCP clients. If unavailable, review Smithery sandbox logs or restart the server process.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

add-record-to-list ~206

[DEPRECATED] This tool has been consolidated into 'manage-list-entry'. Please use 'manage-list-entry' with Mode 1 (Add) parameters instead: - Pass 'recordId', 'objectType', and optionally 'initialValues' - All functionality remains identical This tool will be removed in version 2.0.0. Add company or person to list with optional initial values. Never create records; record must exist first. May require explicit user approval from the host. Requires list UUID, record UUID, object type. If not found, create record first with create-record.

NameTypeReqDescription
initialValuesobjectInitial values for the list entry (e.g., {"stage": "Prospect"})
listIdstringyesUUID of the list to add the record to
objectTypestringyesType of record (e.g., "companies", "people")
recordIdstringyesUUID of the record to add to the list

No output schema declared.

No examples provided.

advanced-filter-list-entries ~189

[DEPRECATED] This tool has been consolidated into 'filter-list-entries'. Please use 'filter-list-entries' with Mode 2 (Advanced) parameters instead: - Pass a 'filters' object with 'filters' array and 'matchAny' flag - All functionality remains identical This tool will be removed in version 2.0.0. --- Filter entries with multi-condition queries (AND/OR logic). Never modify entries; read-only. Requires listId, filters array; matchAny for OR logic. Use filter-list-entries for single conditions.

NameTypeReqDescription
filtersobjectyesAdvanced filter configuration
limitnumberMaximum number of entries to fetch (default: 20)
listIdstringyesID of the list to filter entries from
offsetnumberNumber of entries to skip for pagination (default: 0)

No output schema declared.

No examples provided.

batch_records ~229

Execute batched record operations (create/update/delete/get/search). Never ignore approval guardrails; hosts may require confirmation. May require explicit user approval from the host. Use scoped single-record tools for one company or deal write. operation_type must be specified for legacy payloads; operations arrays must use explicit create/update/delete entries. Run search_records first to stage IDs or payloads for batching.

NameTypeReqDescription
limitnumberMaximum number of results to return
offsetnumberNumber of results to skip for pagination
operation_typestringBatch operation type (legacy format)
operationsarrayArray of operations to perform
record_idsarrayRecord IDs for delete/get (legacy format)
recordsarrayRecord data for create/update (legacy format)
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

{"operation_type":"create","records":[{"domain":"example.com","name":"Example Ltd."},{"domain":"sample.io","name":"Sample Inc."}],"resource_type":"companies"}
batch_search_records ~127

Execute multiple searches in parallel and return grouped results. Never mutate or import data; use batch_records for write operations. Provide queries array (1–10 items recommended) and resource_type. If queries fail, retry individually using search_records.

NameTypeReqDescription
limitnumberMaximum number of results per query (default: 20)
offsetnumberNumber of results to skip per query (default: 0)
queriesarrayyesArray of search query strings
resource_typestringyesResource type to search (companies, people, records, tasks, deals)

No output schema declared.

{"limit":10,"queries":["Acme","Globex"],"resource_type":"companies"}
create_company ~106

Create one company in Attio without choosing resource_type. Never update existing companies or create deals, people, or tasks. May require explicit user approval from the host. Requires record_data with company attribute API slugs such as name, domains, or website. If fields are rejected, call discover_record_attributes with resource_type companies.

NameTypeReqDescription
record_dataobjectyesCompany fields to create. Use Attio attribute API slugs as keys.
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"domains":[{"domain":"acme.example"}],"name":"Acme Corp","website":"https://acme.example"},"return_details":true}
create_deal ~120

Create one deal in Attio without choosing resource_type. Never update existing deals or create companies, people, or tasks. May require explicit user approval from the host. Requires record_data with deal attribute API slugs such as name, stage, value, owner, or associated company/person references. If stage or owner values are rejected, call discover_record_attributes or get_record_attribute_options for deals.

NameTypeReqDescription
record_dataobjectyesDeal fields to create. Use Attio attribute API slugs as keys.
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"associated_company":"company-record-id","name":"Acme expansion","owner":"workspace-member-id","stage":"Demo","value":50000},"return_details":true}
create_note ~219

Create note for companies, people, or deals with full markdown support. Never update or delete notes; creates only. May require explicit user approval from the host. Requires resource_type, record_id, title, content. Set format="markdown" for rich formatting: headings (# ## ###), lists (- or 1.), nested bullets (2-space indent), bold (**text**), code blocks. Use \n for line breaks. If record not found, use search_records first.

NameTypeReqDescription
contentstringyesNote content. Use \n for line breaks. With format="markdown": supports # headings, - bullets, 1. numbered lists, **bold**, `code`, nested lists (2-space indent).
formatstringContent format. Use "markdown" for rich text: headings, lists, bold, code blocks. Default: plaintext.
record_idstringyesID of the record to attach the note to
resource_typestringyesTarget resource type
titlestringyesTitle of the note

No output schema declared.

No examples provided.

create_record ~195

Create new Attio records across supported resource types when a scoped tool is not available. Prefer create_company or create_deal for common company/deal writes. Never update existing records, attach files, or bypass required fields. May require explicit user approval from the host. Requires resource_type plus record_data that matches discover_record_attributes output. If validation fails, call discover_record_attributes to confirm required fields and enums. If a select/status value is rejected, call get_record_attribute_options for that attribute to list valid options before retrying.

NameTypeReqDescription
record_dataobjectyesData to create
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"email_addresses":[{"email_address":"taylor@example.com"}],"name":"Taylor Swift"},"resource_type":"people","return_details":true}
create-list ~210

Create a new CRM list (sales pipeline, recruiting tracker, support queue). Supports templates for quick setup with smart defaults. Never update existing lists or manage list entries. Requires name and parent_object. Template expansion fills defaults before validation. Dry-run mode previews without creating. Use get-lists to verify the list was created. Use update-list-configuration to modify after creation.

NameTypeReqDescription
attributesobjectAdditional list attributes (e.g., stages, custom fields). Merged onto template defaults if template is specified.
descriptionstringOptional description for the list
dry_runbooleanPreview the creation without committing. Returns normalized preview of what would be created.
namestringyesName of the list to create
parent_objectstringyesObject type this list is for (e.g., "companies", "people"). Auto-validated against workspace objects.
templatestringOptional template name for smart defaults. Expands before validation so errors reference actual values.

No output schema declared.

No examples provided.

delete_record ~146

Delete an Attio record from its object (company, person, deal, task). Never cascade delete related data or clean up list memberships automatically. May require explicit user approval from the host. Requires record_id and resource_type; operation is irreversible once confirmed. If uncertain, fetch with get_record_details to confirm the target before deletion.

NameTypeReqDescription
record_idstringyesRecord ID to delete
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

{"record_id":"task_abc123","resource_type":"tasks"}
discover_record_attributes ~125

Discover available attributes (standard/custom) for a resource. Never alter schema or create fields. Requires resource_type; optional categories selects subsets. For select/status attributes, use get_record_attribute_options to fetch valid values before creating or updating records.

NameTypeReqDescription
categoriesarrayAttribute categories
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

{"categories":["custom"],"resource_type":"people"}
fetch ~90

Return the canonical Attio record payload for a search connector reference. Never perform write operations or resolve IDs not emitted by the search tool. Accepts identifier generated by search (<resource>:<uuid>) and returns JSON serialized as text. If fetch fails, rerun search to refresh the identifier or verify the record still exists.

NameTypeReqDescription
idstringyesIdentifier emitted by the search tool (<resource>:<id>).

No output schema declared.

No examples provided.

filter-list-entries ~816

Filter list entries with flexible parameter modes. Auto-detects mode based on parameters provided. **Mode 1 - Simple Filtering (Single Attribute):** Filter entries by a single attribute condition. Required parameters: listId, attributeSlug, condition, value Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "attributeSlug": "status", "condition": "equals", "value": "active" } **Mode 2 - Advanced Filtering (Multi-Condition):** Filter entries with multiple conditions using AND/OR logic. Required parameters: listId, filters (object with filters array and matchAny flag) Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "filters": { "filters": [ {"attribute": {"slug": "status"}, "condition": "equals", "value": "active"}, {"attribute": {"slug": "priority"}, "condition": "greater_than", "value": 5} ], "matchAny": false } } **Mode 3 - Parent Attribute Filtering:** Filter entries by parent record attributes (e.g., company industry, person role). Required parameters: listId, parentObjectType, parentAttributeSlug, condition, value Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "parentObjectType": "companies", "parentAttributeSlug": "categories", "condition": "contains", "value": "Technology" } **Mode 4 - Parent UUID Filtering:** Filter entries by exact parent record UUID (convenience mode, fastest). Required parameters: listId, parentRecordId Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "parentRecordId": "660e8400-e29b-41d4-a716-446655440001" } **Mode Detection:** The tool automatically detects which mode to use based on the parameters you provide. You must provide parameters for exactly ONE mode per call. **Pagination:** All modes support optional 'limit' and 'offset' parameters for pagination. **Migration Guide:** - Replaces: advanced-filter-list-entries → Use Mode 2 (filters parameter) - Replaces: filter-list-entries-by-parent → Use Mode 3 (parentObjectType + p…

NameTypeReqDescription
attributeSlugstringMode 1: Slug of the attribute to filter by (e.g., 'stage', 'status')
conditionstringMode 1 & 3: Filter condition (e.g., 'equals', 'contains', 'greater_than')
filtersobjectMode 2: Advanced filter configuration with multiple conditions
limitnumberMaximum number of entries to fetch (default: 20, applies to all modes)
listIdstringyesUUID of the list to filter entries from (required for all modes)
offsetnumberNumber of entries to skip for pagination (default: 0, applies to all modes)
parentAttributeSlugstringMode 3: Attribute of the parent record to filter by (e.g., "name", "email_addresses", "categories")
parentObjectTypestringMode 3: Type of the parent record (e.g., "companies", "people")
parentRecordIdstringMode 4: UUID of the parent record to filter by (fastest mode for exact record filtering)
valueMode 1 & 3: Value to filter by (type depends on the attribute)

No output schema declared.

No examples provided.

filter-list-entries-by-parent ~274

[DEPRECATED] This tool has been consolidated into 'filter-list-entries'. Please use 'filter-list-entries' with Mode 3 (Parent Attribute) parameters instead: - Pass 'parentObjectType', 'parentAttributeSlug', 'condition', and 'value' - All functionality remains identical This tool will be removed in version 2.0.0. --- Filter entries by parent record attributes (industry, role). Never search multiple lists or modify records. Requires listId, parentObjectType, parentAttributeSlug, condition, value. Use discover_record_attributes for valid slugs.

NameTypeReqDescription
conditionstringyesFilter condition (e.g., "equals", "contains", "starts_with")
limitnumberMaximum number of entries to fetch (default: 20)
listIdstringyesUUID of the list to filter entries from
offsetnumberNumber of entries to skip for pagination (default: 0)
parentAttributeSlugstringyesAttribute of the parent record to filter by (e.g., "name", "email_addresses", "categories")
parentObjectTypestringyesType of the parent record (e.g., "companies", "people")
valueyesValue to filter by (type depends on the attribute)

No output schema declared.

No examples provided.

filter-list-entries-by-parent-id ~207

[DEPRECATED] This tool has been consolidated into 'filter-list-entries'. Please use 'filter-list-entries' with Mode 4 (Parent UUID) parameters instead: - Pass 'parentRecordId' parameter - Note: Parameter renamed from 'recordId' to 'parentRecordId' for consistency - All functionality remains identical (fastest filtering mode) This tool will be removed in version 2.0.0. --- Filter entries by exact parent record UUID. Never search multiple lists. Requires list UUID, record UUID; faster than attribute filtering. Use get-record-list-memberships for workspace-wide search.

NameTypeReqDescription
limitnumberMaximum number of entries to fetch (default: 20)
listIdstringyesUUID of the list to filter entries from
offsetnumberNumber of entries to skip for pagination (default: 0)
recordIdstringyesUUID of the parent record to filter by

No output schema declared.

No examples provided.

get_record_attribute_options ~177

Get valid options for select, multi-select, and status attributes to avoid "Cannot find select option" errors. Never return options for text, number, or other non-option types. Requires resource_type and attribute slug/ID. Use discover_record_attributes to find option-based attributes first. Use retrieved option titles when calling create-record or update-record.

NameTypeReqDescription
attributestringyesThe attribute slug or ID (e.g., "channel", "stage", "categories")
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
show_archivedbooleanInclude archived options in the response

No output schema declared.

{"attribute":"channel","resource_type":"companies"}
{"attribute":"stage","resource_type":"deals","show_archived":true}
get_record_attributes ~141

Retrieve attribute metadata for a given resource type. Never modify schema definitions or record data. Requires resource_type; optional categories narrows groups. Use discover_record_attributes for grouped schema discovery.

NameTypeReqDescription
categoriesarrayAttribute categories
fieldsarraySpecific attribute field names
record_idstringRecord ID to get attributes for (optional)
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

{"categories":["standard"],"resource_type":"companies"}
get_record_details ~135

Fetch a single record with enriched attribute formatting. Never search or filter result sets; use search_records tools instead. Requires resource_type and record_id; optional fields filter output. Validate record IDs with search_records before retrying.

NameTypeReqDescription
fieldsarrayFields to include
record_idstringyesRecord ID to retrieve
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

{"fields":["name","domains"],"record_id":"company_123456","resource_type":"companies"}
get_record_info ~86

Retrieve enriched info subsets (contact, business, social) for a record. Never search lists of records or mutate data. Requires resource_type, record_id, and info_type (contact|business|social). Use get_record_details if you need the full record payload.

NameTypeReqDescription
record_idstringyesUnique identifier of the record
resource_typestringyesType of resource

No output schema declared.

{"record_id":"company_123456","resource_type":"companies"}
get_record_interactions ~131

Fetch interaction metadata (first/last email, calendar, interaction timestamps and owners) for a person or company record. Never retrieve full email content or activity feeds; Attio only exposes interaction timestamps and owner actors. Requires resource_type (people or companies) and record_id. Returns system-generated interaction attributes. If no interactions found, verify the record exists with get_record_details. For activity content, use search_records_by_content with content_type=activity.

NameTypeReqDescription
record_idstringyesRecord ID to retrieve interactions for
resource_typestringyesResource type (only people and companies have interaction metadata)

No output schema declared.

{"record_id":"person_123456","resource_type":"people"}
get-list-details ~77

Retrieve schema and configuration for a specific list (stages, fields, attributes). Never modify list structure or retrieve list entries. Requires valid list UUID or slug; accepts both formats. Use get-lists to discover available list IDs and slugs first.

NameTypeReqDescription
listIdstringyesID or slug of the list to get details for

No output schema declared.

No examples provided.

get-list-entries ~116

Retrieve all records in a list with pagination (companies, people in pipelines). Never filter entries or modify list memberships. Requires list UUID (not slug); default limit 20, max per page varies by API. Use filter-list-entries for attribute-based filtering instead.

NameTypeReqDescription
limitnumberMaximum number of entries to fetch (default: 20)
listIdstringyesUUID of the list to get entries for
offsetnumberNumber of entries to skip for pagination (default: 0)

No output schema declared.

No examples provided.

get-lists ~53

Retrieve all CRM lists (sales pipelines, lead stages, customer segments). Never create or modify lists, only reads existing lists. Returns all lists visible to the authenticated workspace. Use get-list-details to inspect individual list schemas.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get-record-list-memberships ~145

Find all lists containing a specific company or person record. Never modify list memberships or retrieve list entries. Requires recordId; processes 5 lists in parallel by default (max 20). If record not found, verify recordId with search_records first.

NameTypeReqDescription
batchSizenumberNumber of lists to process in parallel (1-20, default: 5)
includeEntryValuesbooleanWhether to include entry values in the response (e.g., stage, status)
objectTypestringType of record (e.g., "companies", "people")
recordIdstringyesID of the record to find in lists

No output schema declared.

No examples provided.

get-workspace-member ~67

Retrieve profile and access details for one workspace member. Never update member information or change permissions. Requires workspace_member_id from list/search results; read-only. Use list-workspace-members to confirm the memberId before retrying.

NameTypeReqDescription
memberIdstringyesWorkspace member ID (UUID).

No output schema declared.

No examples provided.

list_notes ~167

Retrieve notes for a record with timestamps. Never create or modify notes; read-only. Requires resource_type, record_id; sorted by creation date. If empty, verify record has notes with get_record_details.

NameTypeReqDescription
limitnumberMaximum number of results to return
offsetnumberNumber of results to skip for pagination
parent_record_idstringAlias for record_id (backward compatibility)
record_idstringRecord ID to list notes for
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…

No output schema declared.

No examples provided.

list-workspace-members ~105

List workspace members to plan assignments and access checks. Never change access levels or invite new members; read-only. Supports optional search, pagination (1-100 per page, default 25). Use search-workspace-members for targeted lookups.

NameTypeReqDescription
pageintegerPage number (1-indexed).
pageSizeintegerNumber of results per page (max 100).
searchstringOptional case-insensitive match on member name or email.

No output schema declared.

No examples provided.

manage-list-entry ~526

Manage list entries with flexible action modes. Auto-detects action based on parameters provided. **Mode 1 - Add Entry (Add record to list):** Add a company or person record to a list with optional initial values. Required parameters: listId, recordId, objectType Optional parameters: initialValues Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "recordId": "660e8400-e29b-41d4-a716-446655440001", "objectType": "companies", "initialValues": {"stage": "Prospect"} } **Mode 2 - Remove Entry:** Remove an entry from a list. Required parameters: listId, entryId Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "entryId": "770e8400-e29b-41d4-a716-446655440002" } **Mode 3 - Update Entry:** Update attributes on an existing list entry. Required parameters: listId, entryId, attributes Example: { "listId": "550e8400-e29b-41d4-a716-446655440000", "entryId": "770e8400-e29b-41d4-a716-446655440002", "attributes": {"stage": "Qualified"} } **Mode Detection:** The tool automatically detects which action to perform based on the parameters you provide. You must provide parameters for exactly ONE mode per call. **Migration Guide:** - Replaces: add-record-to-list → Use Mode 1 (recordId + objectType) - Replaces: remove-record-from-list → Use Mode 2 (entryId only) - Replaces: update-list-entry → Use Mode 3 (entryId + attributes)

NameTypeReqDescription
attributesobjectMode 3: Attributes to update on the list entry
entryIdstringMode 2 & 3: UUID of the list entry to remove or update
initialValuesobjectMode 1: Initial attribute values for the list entry
listIdstringyesUUID of the list (required for all modes)
objectTypestringMode 1: Type of record to add
recordIdstringMode 1: UUID of the record to add to the list

No output schema declared.

No examples provided.

merge_records ~301

Preview and, after explicit confirmation, safely merge two Attio deal records using the native beta merge operation. Never merge people or companies, merge more than one pair, or retry an indeterminate native merge. May require explicit user approval from the host. Dry-run defaults to true. Execute requires dry_run=false, confirm=true, and plan_fingerprint from that dry-run. For HTTP 202, wait and call get_record_details with new_record_id later; both original ids are unreadable after native merge.

NameTypeReqDescription
confirmbooleanRequired true in addition to dry_run=false to execute
dry_runbooleanPreview the field plan without patching, clearing, or merging
keep_from_leftoverarrayAttribute slugs whose leftover values should patch the primary
override_linked_mismatchbooleanExplicitly allow differing associated person/company records
plan_fingerprintstringFingerprint from the dry-run field plan. Required to execute so the pair can be re-diffed
record_idstringyesPrimary/live deal record UUID that should win conflicts
resource_typestringyesObject type to merge. This beta operation executes for deals only; people and companies are reserved for later coverage.
secondary_record_idstringyesLeftover deal record UUID to merge into the primary
skip_leftover_attributesarrayDangerous fill slugs to clear on the leftover before merge

No output schema declared.

No examples provided.

remove-record-from-list ~166

[DEPRECATED] This tool has been consolidated into 'manage-list-entry'. Please use 'manage-list-entry' with Mode 2 (Remove) parameters instead: - Pass 'entryId' only (do not include 'attributes' or 'recordId') - All functionality remains identical This tool will be removed in version 2.0.0. Remove company or person from list (membership only). Never delete underlying record; membership only. May require explicit user approval from the host. Requires list UUID, entry UUID (not record UUID). Use get-list-entries to find entry UUID.

NameTypeReqDescription
entryIdstringyesUUID of the list entry to remove (not the record ID)
listIdstringyesUUID of the list to remove the entry from

No output schema declared.

No examples provided.

search ~129

Run lightweight compatibility search across companies, people, lists, and tasks for ChatGPT MCP. Never support complex filters, batch queries, or return rich record payloads (use search_records* tools). Requires query string (min 1 char); optional type filter; limit up to 25 results per call. When you need pagination or attribute filtering, switch to search_records or search_records_advanced.

NameTypeReqDescription
limitintegerMaximum number of results to return (default 10).
querystringyesSearch query string (required).
typestringOptional resource filter (defaults to all).

No output schema declared.

No examples provided.

search_records ~1,079

Search across companies, people, deals, tasks, and records. Never create or modify records. Returns max 100 results (default: 10). use discover_record_attributes to find searchable fields.

NameTypeReqDescription
created_afterstringFilter records created after this date (ISO 8601)
created_beforestringFilter records created before this date (ISO 8601)
date_fieldstringWhich date field to filter on. Attio supports created_at and last_interaction for people and companies. updated_at/modifed-style filtering is not supported live on those objects.
date_fromstringStart date for filtering (ISO 8601 format)
date_tostringEnd date for filtering (ISO 8601 format)
fieldsarrayFields to search (content)
filtersobjectAdvanced filter conditions with nested array structure. Required format: { "filters": [ { "attribute": {"slug": "field_name"}, "condition": "operator", "value": "search_val…
limitnumberMaximum number of results to return
match_typestringString matching
offsetnumberNumber of results to skip for pagination
querystringSearch query string
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
search_typestringType of search
sortstringSort order
timeframestringRelative timeframe filter
updated_afterstringFilter records updated after this date (ISO 8601)
updated_beforestringFilter records updated before this date (ISO 8601)

No output schema declared.

{"limit":5,"query":"customer@example.com","resource_type":"people"}
{"filters":{"filters":[{"attribute":{"slug":"stage"},"condition":"equals","value":"Demo"}]},"limit":20,"resource_type":"deals"}
{"filters":{"filters":[{"attribute":{"slug":"owner"},"condition":"equals","value":"user_id_here"},{"attribute":{"slug":"value"},"condition":"greater_than","value":10000}]},"limit":50,"resource_type":"deals"}
search_records_advanced ~481

Search companies, people, deals, or tasks with complex nested filters (e.g., find deals by owner+stage, companies by industry+location). Never mutate records; use update_record or delete_record. Supports filter groups, scoring, pagination, and up to 100 items. Requires resource_type parameter. If filters fail, fetch valid attributes via discover_record_attributes.

NameTypeReqDescription
filtersobjectComplex filter conditions with nested array structure. Required format: { "filters": [ { "attribute": {"slug": "field_name"}, "condition": "operator", "value": "search_valu…
limitnumberMaximum number of results to return
offsetnumberNumber of results to skip for pagination
querystringSearch query string
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
sort_bystringField to sort results by
sort_orderstringSort order

No output schema declared.

{"filters":{"filters":[{"attribute":{"slug":"email_addresses.email_address"},"condition":"contains","value":"@example.com"}]},"limit":10,"resource_type":"people"}
search_records_by_content ~163

Search record content (notes, activity, communications). Never modify note content or attachments. Requires resource_type and content_query; optional fields array. Narrow scope with fields or switch to search_records_advanced.

NameTypeReqDescription
content_typestringyesType of content to search
limitnumberMaximum number of results to return
offsetnumberNumber of results to skip for pagination
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
search_querystringyesQuery to search within content

No output schema declared.

{"content_type":"notes","limit":3,"resource_type":"notes","search_query":"follow-up call"}
search_records_by_relationship ~130

Search records using relationship anchors (list, company, people). Never modify memberships; use list tools for writes. Requires resource_type and related resource identifier. Use search_records to resolve IDs before calling.

NameTypeReqDescription
limitnumberMaximum number of results to return
listIdstring(Optional) List ID (must be a valid UUID if provided)
offsetnumberNumber of results to skip for pagination
relationship_typestringyesRelationship type
source_idstringyesSource record ID
target_resource_typestringTarget resource type

No output schema declared.

{"limit":5,"relationship_type":"company_to_people","source_id":"company_123456","target_resource_type":"people"}
search_records_by_timeframe ~224

Filter records by creation, update, or interaction timeframes. Never modify lifecycle state or scheduling follow-ups. Requires resource_type; provide timeframe or explicit date boundaries. Call search_records if timeframe filters are too restrictive.

NameTypeReqDescription
date_fieldstringOptional explicit date field override. last_interaction is supported for people and companies; updated_at and modified_at remain accepted aliases but are not supported live on those objects.
end_datestringEnd date (ISO 8601 format)
limitnumberMaximum number of results to return
offsetnumberNumber of results to skip for pagination
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
start_datestringStart date (ISO 8601 format)
timeframe_typestringTimeframe filter type

No output schema declared.

{"end_date":"2025-01-31","resource_type":"deals","start_date":"2025-01-01","timeframe_type":"created"}
search-workspace-members ~72

Search workspace members by name, email, or access role. Never modify member profiles or permissions; lookup only. Requires query string (minimum 2 characters). If no results, list-workspace-members provides the full roster.

NameTypeReqDescription
querystringyesSearch term for member name, email address, or role.

No output schema declared.

No examples provided.

smithery_debug_config ~69

Retrieve non-sensitive diagnostic information about Smithery runtime configuration propagation. Never expose credentials or auth state, write data, or modify configuration. Returns runtime, workspace, and context-storage diagnostics only. Read-only operation. Use this tool to compare runtime mode, workspace configuration, and context storage state across deployments.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

update_company ~115

Update one company in Attio without choosing resource_type. Never create records, delete records, or update deals. May require explicit user approval from the host. Requires record_id and record_data with company attribute API slugs. Call get_record_details or search_records for companies first to confirm the target company ID.

NameTypeReqDescription
record_dataobjectyesCompany fields to update. Use Attio attribute API slugs as keys.
record_idstringyesCompany record ID to update
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"description":"Enterprise manufacturing account","website":"https://acme.example"},"record_id":"company-record-id","return_details":true}
update_deal ~115

Update one deal in Attio without choosing resource_type. Never create records, delete records, or update companies. May require explicit user approval from the host. Requires record_id and record_data with deal attribute API slugs. Call search_records for deals first to confirm the target deal ID and current stage.

NameTypeReqDescription
record_dataobjectyesDeal fields to update. Use Attio attribute API slugs as keys.
record_idstringyesDeal record ID to update
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"associated_company":"company-record-id","stage":"Proposal","value":75000},"record_id":"deal-record-id","return_details":true}
update_record ~207

Update existing Attio record fields across supported resource types when a scoped tool is not available. Prefer update_company or update_deal for common company/deal writes. Never create new records, delete data, or manage list memberships. May require explicit user approval from the host. Requires resource_type, record_id, and record_data; supports partial updates with schema validation. Call get_record_details first to inspect the latest values before editing. If a select/status value is rejected, call get_record_attribute_options for that attribute to list valid options.

NameTypeReqDescription
record_dataobjectyesUpdated data
record_idstringyesRecord ID to update
resource_typestringyesType of resource to operate on. Standard types: companies, people, deals, tasks, lists, records, notes. Custom objects (e.g., "funds", "investment_opportunities") are also supported after running `at…
return_detailsbooleanReturn full details

No output schema declared.

{"record_data":{"status":"Qualified"},"record_id":"record_987654","resource_type":"records","return_details":false}
update-list-configuration ~145

Update configuration of an existing list (name, description, custom fields). Detects immutable fields and provides clear errors. Never change parent_object (immutable) or manage list entries. Requires listId. Immutable fields (parent_object) are rejected before the API call. Dry-run mode previews changes. Use get-list-details to inspect current configuration. Use create-list for a different parent_object.

NameTypeReqDescription
attributesobjectyesAttributes to update. Immutable fields (parent_object) will be rejected with a clear error.
dry_runbooleanPreview the update without committing. Returns normalized preview of what would change.
listIdstringyesUUID of the list to update

No output schema declared.

No examples provided.

update-list-entry ~169

[DEPRECATED] This tool has been consolidated into 'manage-list-entry'. Please use 'manage-list-entry' with Mode 3 (Update) parameters instead: - Pass 'entryId' and 'attributes' parameters - All functionality remains identical This tool will be removed in version 2.0.0. Update list entry attributes (stage, status, custom fields). Never update record attributes; use update-record for that. May require explicit user approval from the host. Requires list UUID, entry UUID, attributes object. Use get-list-details for valid attributes and values.

NameTypeReqDescription
attributesobjectyesAttributes to update on the list entry
entryIdstringyesUUID of the list entry to update
listIdstringyesUUID of the list containing the entry

No output schema declared.

No examples provided.

Common questions

What is the Attio MCP Server server?

Attio MCP Server is listed in the public MCP registry as io.github.kesslerio/attio-mcp-server. AI-powered Attio CRM access. Manage contacts, companies, deals, tasks, notes and workflows. This page covers its npm package (attio-mcp).

Is the Attio MCP Server server safe to use?

Attio MCP Server scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Attio MCP Server server expose?

Attio MCP Server exposes 44 tools: aaa-health-check, smithery_debug_config, search_records, get_record_details, create_company, and 39 more. Their descriptions and schemas cost roughly 8,811 tokens of context every time the server is loaded.

Is the Attio MCP Server server still maintained?

Attio MCP Server is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Attio MCP Server server under?

Attio MCP Server declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.