Connects Claude to your Attio CRM workspace through 19 universal operations covering the full API surface. You get complete CRUD for companies, people, deals, tasks, lists, and notes, plus batch operations, advanced filtering with AND/OR logic, and relationship navigation between contacts and pipeline stages. The implementation consolidates what used to be 40+ resource-specific tools into universal operations like search_records and batch_records, with scoped helpers for high-frequency writes like create_deal and update_company. Includes a workspace schema discovery tool that generates Claude skills from your actual field names to prevent "wrong field" errors. Reach for this when you need to query prospects, update pipelines, or automate CRM workflows through natural language instead of clicking through Attio's UI.
Public tool metadata for what this MCP can expose to an agent.
create-commentCreates 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. Email addresses in the cont...6 paramsCreates 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. Email addresses in the cont...
contentstringparent_liststringparent_objectstringparent_entry_idstringparent_record_idstringparent_comment_idstringadd-record-to-listAdd a record to a list as a new list entry. IMPORTANT: Before calling this tool: 1) You should call list-list-attribute-definitions for the target list to understand which entry attributes are available. 2) You should call list-records or search-records to find the record you...5 paramsAdd a record to a list as a new list entry. IMPORTANT: Before calling this tool: 1) You should call list-list-attribute-definitions for the target list to understand which entry attributes are available. 2) You should call list-records or search-records to find the record you...
liststringentry_valuesobjectparent_objectstringallow_duplicatesbooleanparent_record_idstringcreate-noteCreates a new note attached to a record. Returns the created note's ID.5 paramsCreates a new note attached to a record. Returns the created note's ID.
titlestringcontentstringmeeting_idstringparent_objectstringparent_record_idstringcreate-recordCreate a new record in a given object. IMPORTANT: Before calling this tool, you should call list-attribute-definitions for the target object to understand which attributes are available, their types, whether they are required, and (for select/status fields) the valid options....2 paramsCreate a new record in a given object. IMPORTANT: Before calling this tool, you should call list-attribute-definitions for the target object to understand which attributes are available, their types, whether they are required, and (for select/status fields) the valid options....
objectstringvaluesobjectcreate-taskCreates a new task in Attio. Tasks can optionally have a deadline, an assignee (workspace member), and be linked to a record (e.g., a person or company). To assign to a workspace member, provide their workspace_member_id. To link to a record, provide both the object type (e.g....6 paramsCreates a new task in Attio. Tasks can optionally have a deadline, an assignee (workspace member), and be linked to a record (e.g., a person or company). To assign to a workspace member, provide their workspace_member_id. To link to a record, provide both the object type (e.g....
contentstringdeadline_atstringis_completedbooleanlinked_record_idstringlinked_record_objectstringassignee_workspace_member_idstringdelete-commentDeletes a comment. You can only delete comments that you created. Deleting a parent comment will also delete all of its replies.1 paramsDeletes a comment. You can only delete comments that you created. Deleting a parent comment will also delete all of its replies.
comment_idstringget-call-recordingRetrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.2 paramsRetrieves the full details of a call recording by ID, including its status, timestamps, and complete transcript.
meeting_idstringcall_recording_idstringget-email-contentRetrieves the full content/body of an email. Requires the mailbox_id and email_header_id, which can be obtained from email search results.2 paramsRetrieves the full content/body of an email. Requires the mailbox_id and email_header_id, which can be obtained from email search results.
email_idstringmailbox_idstringget-note-bodyGet the body of a note by its ID1 paramsGet the body of a note by its ID
note_idstringget-records-by-idsRetrieve a given set of records by their IDs for a given object. Returns an array of records with their attribute values. If a record is not found, it will not be included in the response.2 paramsRetrieve a given set of records by their IDs for a given object. Returns an array of records with their attribute values. If a record is not found, it will not be included in the response.
objectstringrecord_idsarraylist-attribute-definitionsList attribute definitions for a given object5 paramsList attribute definitions for a given object
limitnumberqueryvalueobjectstringoffsetnumberinclude_archivedbooleanlist-comment-repliesLists replies to a comment. Provide the comment_id of a top-level comment to fetch its replies. Cannot be used with reply comments - only top-level comments that were created on records or list entries. All replies in a thread use the same parent comment ID.3 paramsLists replies to a comment. Provide the comment_id of a top-level comment to fetch its replies. Cannot be used with reply comments - only top-level comments that were created on records or list entries. All replies in a thread use the same parent comment ID.
limitnumberoffsetnumbercomment_idstringlist-commentsLists comments on a record or list entry. Returns paginated top-level comments with up to 5 replies each. If a thread has more replies, use "list-comment-replies" to fetch additional replies. Provide either (parent_object and parent_record_id) to list comments on a record, or...6 paramsLists comments on a record or list entry. Returns paginated top-level comments with up to 5 replies each. If a thread has more replies, use "list-comment-replies" to fetch additional replies. Provide either (parent_object and parent_record_id) to list comments on a record, or...
limitnumberoffsetnumberparent_liststringparent_objectstringparent_entry_idstringparent_record_idstringlist-list-attribute-definitionsList attribute definitions for a given list5 paramsList attribute definitions for a given list
liststringlimitnumberqueryvalueoffsetnumberinclude_archivedbooleanlist-listsList all lists in the Attio workspace. Returns list metadata including ID, name, API slug, and parent object types. Use the query parameter to filter by name or slug.3 paramsList all lists in the Attio workspace. Returns list metadata including ID, name, API slug, and parent object types. Use the query parameter to filter by name or slug.
limitnumberquerystringoffsetnumberlist-records-in-listList entries in a given list with optional filtering and sorting. Returns paginated results. Use this tool to retrieve entries within a list that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort resul...5 paramsList entries in a given list with optional filtering and sorting. Returns paginated results. Use this tool to retrieve entries within a list that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort resul...
liststringlimitnumbersortsarrayfiltervalueoffsetnumberlist-recordsList records in a given object with optional filtering and sorting. Returns paginated results. Use this tool to retrieve records that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attrib...5 paramsList records in a given object with optional filtering and sorting. Returns paginated results. Use this tool to retrieve records that match specific criteria. You can filter on attributes using comparison operators, combine filters with AND/OR logic, and sort results by attrib...
limitnumbersortsarrayfiltervalueobjectstringoffsetnumberlist-tasksLists tasks in the workspace with optional filters. Returns paginated results with task content, completion status, assignees, linked records, and deadlines. Use to find tasks by assignee, completion status, linked record, or date ranges.12 paramsLists tasks in the workspace with optional filters. Returns paginated results with task content, completion status, assignees, linked records, and deadlines. Use to find tasks by assignee, completion status, linked record, or date ranges.
limitnumberoffsetnumbersort_bystringcreated_at · deadline_atdefault: deadline_atis_completedbooleancreated_at_gtestringcreated_at_ltestringsort_directionstringasc · descdefault: ascdeadline_at_gtestringdeadline_at_ltestringlinked_record_idstringlinked_record_objectstringassignee_workspace_member_idvaluelist-workspace-membersList members in the Attio workspace. Returns a list of matching members with their ID, email address, name, access level, and team memberships. Use the query parameter to filter by name, email, or team.2 paramsList members in the Attio workspace. Returns a list of matching members with their ID, email address, name, access level, and team memberships. Use the query parameter to filter by name, email, or team.
querystringinclude_suspendedbooleanlist-workspace-teamsList teams in the workspace. Teams are groups of workspace members used primarily for permission management. Returns an array of teams, each with: workspace_team_id, name, description, is_archived, created_at, and members (array of {name, email}).1 paramsList teams in the workspace. Teams are groups of workspace members used primarily for permission management. Returns an array of teams, each with: workspace_team_id, name, description, is_archived, created_at, and members (array of {name, email}).
include_archivedbooleanrun-basic-reportRun an aggregate report on records in an object or entries in a list. Use this tool when you need totals, averages, minimums, maximums, or grouped breakdowns. How to use: 1. Pick a source object/list via slug or UUID. 2. Choose a metric: - {"type":"count"} for counting records...4 paramsRun an aggregate report on records in an object or entries in a list. Use this tool when you need totals, averages, minimums, maximums, or grouped breakdowns. How to use: 1. Pick a source object/list via slug or UUID. 2. Choose a metric: - {"type":"count"} for counting records...
filtervaluemetricvaluesourcestringgroup_byarraysearch-call-recordings-by-metadataSearches all call recordings across the workspace by their metadata. Useful for finding call recordings based on who was on the call (workspace members or person records), related records (e.g., companies or deals), meeting title, and time range. Returns paginated results orde...9 paramsSearches all call recordings across the workspace by their metadata. Useful for finding call recordings based on who was on the call (workspace members or person records), related records (e.g., companies or deals), meeting title, and time range. Returns paginated results orde...
limitnumberoffsetnumberstarts_afterstringstarts_beforestringrelated_record_idsarraymeeting_title_querystringrelated_record_objectstringspeaker_person_record_idsarrayspeaker_workspace_member_idsarraysearch-emails-by-metadataSearches emails visible to the user by their metadata. Useful for finding emails based on participants, domain, and time range. Returns paginated results ordered by sent time (most recent first). Uses limit/offset pagination. When both domain and participant_email_addresses ar...6 paramsSearches emails visible to the user by their metadata. Useful for finding emails based on participants, domain, and time range. Returns paginated results ordered by sent time (most recent first). Uses limit/offset pagination. When both domain and participant_email_addresses ar...
limitnumberdomainstringoffsetnumbersent_at_gtstringsent_at_ltstringparticipant_email_addressesarraysearch-meetingsSearch across past and future meetings in the workspace. Returns paginated results with meeting metadata and associated call recording IDs. Useful for finding meetings based on participants, related records, and time range. Results are split into past_meetings (sorted by start...10 paramsSearch across past and future meetings in the workspace. Returns paginated results with meeting metadata and associated call recording IDs. Useful for finding meetings based on participants, related records, and time range. Results are split into past_meetings (sorted by start...
limitnumberoffsetnumbertimezonestringstarts_afterstringstarts_beforestringrelated_record_idsarrayrelated_record_objectstringrelated_records_operatorstringAND · ORdefault: ANDparticipant_email_addressesarrayparticipant_email_addresses_operatorstringAND · ORdefault: ORsearch-notes-by-metadataSearches for notes by their metadata. Useful for finding notes based on parent record, meeting, author (workspace member), and creation time. Returns paginated results ordered by creation date (most recent first). Uses limit/offset pagination.8 paramsSearches for notes by their metadata. Useful for finding notes based on parent record, meeting, author (workspace member), and creation time. Returns paginated results ordered by creation date (most recent first). Uses limit/offset pagination.
limitnumberoffsetnumbermeeting_idstringcreated_at_gtstringcreated_at_ltstringparent_record_idstringparent_record_objectstringworkspace_membership_idstringsearch-recordsPerform a full-text search for records in a given object. Only searches indexed attributes: domains, email addresses, phone numbers, name/title, description, social handles, and location. Returns paginated results.4 paramsPerform a full-text search for records in a given object. Only searches indexed attributes: domains, email addresses, phone numbers, name/title, description, social handles, and location. Returns paginated results.
limitnumberquerystringobjectstringoffsetnumbersemantic-search-call-recordingsSearches all call recordings across the workspace using semantic similarity. Returns call recordings that are most semantically similar to the query, even if the exact keywords are not present in the transcript. Useful for finding calls where a specific topic was discussed. Se...1 paramsSearches all call recordings across the workspace using semantic similarity. Returns call recordings that are most semantically similar to the query, even if the exact keywords are not present in the transcript. Useful for finding calls where a specific topic was discussed. Se...
querystringsemantic-search-emailsSearches emails visible to the user using semantic similarity. Returns up to 20 emails that are most semantically similar to the query, even if exact keywords are not present. Useful for finding emails where a specific topic was discussed. Returns email metadata only (ID, subj...2 paramsSearches emails visible to the user using semantic similarity. Returns up to 20 emails that are most semantically similar to the query, even if exact keywords are not present. Useful for finding emails where a specific topic was discussed. Returns email metadata only (ID, subj...
querystringinclude_emails_of_othersbooleansemantic-search-notesSearches all notes across the workspace using semantic similarity. Returns up to 20 notes that are most semantically similar to the query, even if the exact keywords are not present in the note. Useful for finding notes where a specific topic was discussed. Returns note metada...1 paramsSearches all notes across the workspace using semantic similarity. Returns up to 20 notes that are most semantically similar to the query, even if the exact keywords are not present in the note. Useful for finding notes where a specific topic was discussed. Returns note metada...
querystringupdate-listUpdate a list's name or API slug3 paramsUpdate a list's name or API slug
liststringnamestringapi_slugstringupdate-recordUse this tool to update people, companies, and other records by `record_id`.4 paramsUse this tool to update people, companies, and other records by `record_id`.
objectstringvaluesobjectrecord_idstringpatch_multiselect_valuesbooleanupdate-taskUpdates an existing task in Attio. You can update the deadline, completion status, assignee, and linked record. To update the assignee, provide their workspace_member_id. To update the linked record, provide both the object type (e.g., "people", "companies") and the record_id...6 paramsUpdates an existing task in Attio. You can update the deadline, completion status, assignee, and linked record. To update the assignee, provide their workspace_member_id. To update the linked record, provide both the object type (e.g., "people", "companies") and the record_id...
task_idstringdeadline_atstringis_completedbooleanlinked_record_idstringlinked_record_objectstringassignee_workspace_member_idstringupsert-recordUse this tool to create or update people, companies and other records. A matching attribute is used to search for existing 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 `mat...4 paramsUse this tool to create or update people, companies and other records. A matching attribute is used to search for existing 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 `mat...
objectstringvaluesobjectmatching_attributestringpatch_multiselect_valuesbooleanwhoamiReturns information about the current user's identity and workspace membership, including their email, name, workspace member ID, access level, and workspace name.Returns information about the current user's identity and workspace membership, including their email, name, workspace member ID, access level, and workspace name.
No parameter schema in public metadata yet.
A comprehensive Model Context Protocol (MCP) server for Attio, providing complete CRM surface coverage. This server enables AI assistants like Claude and ChatGPT to interact directly with your entire Attio workspace through natural language—manage Deals, Tasks, Lists, People, Companies, Records, and Notes without falling back to raw API calls.
Transform your CRM workflows with AI-powered automation. Instead of clicking through multiple screens, simply ask Claude or ChatGPT to find prospects, update records, manage pipelines, and analyze your data using natural language commands.
🎉 v1.0.0 Milestone: Complete Attio CRM surface coverage with full ChatGPT Developer Mode integration.
"Find all AI companies with 50+ employees that we haven't contacted in 30 days and add them to our Q1 outreach list"
⚠️ Smithery Temporarily Unavailable: Smithery has changed their deployment model to require external hosting. We're working on Cloudflare Worker hosting for ChatGPT users. In the meantime, use Tier 4 (Cloudflare Worker) for ChatGPT/remote access.
ChatGPT Pro/Plus users can access the Attio toolset through natural language using a self-hosted Cloudflare Worker:
Focused Tool Surface: Consolidated 40+ resource-specific tools into universal operations, then added scoped high-frequency write tools for safer company and deal updates.
search_records and search_records_advancedcreate_company and update_companysearch_records_by_relationshipbatch_recordsget_record_infosearch_records_by_relationshipsearch_records_by_content and search_records_by_timeframefilter-list-entries - Unified filtering with 4 modesmanage-list-entry - Unified entry management with 3 modesget-list-entries - Retrieve list entriesget-record-list-memberships - Find record's list membershipscreate_deal and update_dealresource_type parameterSupercharge Claude's Attio knowledge with pre-built skills that prevent common errors and teach best practices.
| Skill | Purpose | Setup |
|---|---|---|
| attio-mcp-usage | Error prevention + universal workflow patterns | Bundled - just use it |
| attio-workspace-schema | YOUR workspace's exact field names and options | npx attio-discover generate-skill --all --zip |
| attio-skill-generator | Create custom workflow skills (advanced) | Python + prompting |
Quick Start (solves "wrong field name" errors):
npx attio-discover generate-skill --all --zip
# Import ZIP into Claude Desktop: Settings > Skills > Install Skill
See Skills Documentation for complete setup and usage guides.
Intelligent shortcuts that help Claude work faster with your CRM data:
See Using Out-of-the-Box Prompts for detailed documentation and examples.
NEW: 10 pre-built MCP prompts for common Sales workflows. No setup required—just use them!
| Prompt | Description | Key Arguments | Example |
|---|---|---|---|
people_search.v1 | Find people by title, company, territory | query, limit, format | Find AE in fintech, SF |
company_search.v1 | Query companies by domain, segment, plan | query, limit, format | Find SaaS companies >100 employees |
deal_search.v1 | Filter deals by owner, stage, value, close date | query, limit, format | Find deals >$50k closing Q1 |
log_activity.v1 | Log calls/meetings/emails to records | target, type, summary, dry_run | Log call with Nina at Acme |
create_task.v1 | Create tasks with natural language due dates | title, content, due_date, dry_run | Create task: Follow up tomorrow |
advance_deal.v1 | Move deal to target stage with next action | deal, target_stage, create_task, dry_run | Advance deal to "Proposal Sent" |
add_to_list.v1 | Add records to a List by name or ID | records, list, dry_run | Add 5 companies to Q1 Outreach |
qualify_lead.v1 | Research lead with web + BANT/CHAMP scoring | target, framework, limit_web, dry_run | Qualify Acme Corp with BANT |
meeting_prep.v1 | 360° prep: notes, tasks, deals, agenda | target, format, verbosity | Prep for meeting with Acme CEO |
pipeline_health.v1 | Weekly snapshot: created/won/slipped + risks | owner, timeframe, segment | Pipeline health for @me last 30d |
# Search for prospects
"Use people_search.v1: Find Account Executives in San Francisco at fintech companies, limit 25"
# Log activity
"Use log_activity.v1: Log a call with Nina at Acme Corp, discussed Q1 pricing, create follow-up task"
# Qualify a lead (with web research)
"Use qualify_lead.v1: Qualify Acme Corp using BANT framework, dry run mode"
# Meeting prep
"Use meeting_prep.v1: Prepare for meeting with contact at Acme Corp"
All read prompts support:
format: table | json | ids (default: table)fields_preset: sales_short | full (default: sales_short)verbosity: brief | normal (default: brief)All write prompts support:
dry_run: true | false (default: false) - Preview changes without executingPrompts include built-in token optimization:
MCP_DEV_META=true for token counts in responsesPROMPT_TELEMETRY_ENABLED=true for usage loggingMAX_PROMPT_TOKENS environment variableFor complete prompt documentation, see docs/prompts/v1-catalog.md.
/objects/tasks/attributes has limitations, handled with fallback patternsDISABLE_UNIVERSAL_TOOLS=true environment variable (deprecated)readOnlyHint, destructiveHint) so OpenAI Developer Mode can auto-approve reads and request confirmation for writes.ATTIO_MCP_TOOL_MODE in Smithery configuration for full access.search, fetch, aaa-health-check), explicitly configure ATTIO_MCP_TOOL_MODE: 'search' in Smithery dashboard when Developer Mode is unavailable.For detailed troubleshooting and solutions, see TROUBLESHOOTING.md and GitHub Issues.
Build powerful CRM queries with multi-criteria AND/OR filtering. See the Advanced Search Guide for complete examples and operator reference.
⚠️ IMPORTANT: Correct Package Name
The npm package name is
attio-mcp(notattio-mcp-server). The GitHub repository is namedattio-mcp-server, but the npm package was renamed toattio-mcpin June 2025. Installingattio-mcp-serverwill give you an outdated v0.0.2 release with only 4 legacy tools.
| Client | Local Install (Tier 1-2) | Cloudflare Worker (Tier 3) |
|---|---|---|
| Claude Desktop | ✅ Recommended | ✅ Full support |
| Claude Web | N/A | ✅ Full support |
| ChatGPT (Pro/Plus) | N/A | ✅ Recommended |
| Cursor IDE | ✅ Full support | ✅ Full support |
| Claude Code (CLI) | ✅ Recommended | Partial |
Choose your installation method:
Best for: Developers who prefer local installations with automatic configuration.
One-command scripts that install attio-mcp and configure your client automatically.
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-desktop.sh | bash
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-cursor.sh | bash
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-code.sh | bash
These scripts will:
attio-mcp npm package globally (if needed)Best for: Power users who prefer full control or use unsupported clients.
npm install -g attio-mcp
~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here"
}
}
}
}
npm install -g attio-mcp
Location: ~/.cursor/mcp.json
{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here"
}
}
}
}
echo '{"command":"attio-mcp","env":{"ATTIO_API_KEY":"your_key_here"}}' | claude mcp add-json attio-mcp --stdin -s user
Edit ~/.claude/settings.json:
{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here"
}
}
}
}
For development or custom deployments:
git clone https://github.com/kesslerio/attio-mcp-server.git
cd attio-mcp-server
npm install
npm run build
Run directly:
ATTIO_API_KEY=your_key node dist/index.js
# Global installation for CLI usage
npm install -g attio-mcp
# Or local installation for project integration
npm install attio-mcp
Best for: Teams needing centralized OAuth, multi-user access, mobile access, or running MCP without local installation.
Deploy your own Attio MCP server on Cloudflare Workers with full OAuth 2.1 support.
Mobile Access: With a remote MCP server, you can use Attio tools from:
| Feature | Cloudflare Worker |
|---|---|
| Setup complexity | Medium |
| OAuth built-in | ✅ |
| Mobile app access | ✅ |
| Multi-user access | ✅ |
| Custom domain | ✅ |
| Self-hosted | ✅ |
| Team deployments | ✅ Full |
| Cost | Free tier |
cd examples/cloudflare-mcp-server
npm install
wrangler kv:namespace create "TOKEN_STORE"
# Update wrangler.toml with the KV namespace ID
wrangler secret put ATTIO_CLIENT_ID
wrangler secret put ATTIO_CLIENT_SECRET
wrangler secret put TOKEN_ENCRYPTION_KEY
wrangler deploy
After deployment, configure your client with your Worker URL:
See Cloudflare Worker Deployment Guide for:
get_record_attribute_options tool (#975) - Get valid options for select/status fields with enhanced error messages--option-fetch-delay flagsnake_case, verb-first naming (old names work via aliases until v2.0.0)select_title_to_array for clarityUpgrading from v1.3.x or earlier? Tool names have changed to follow MCP naming conventions.
Old names still work via backward-compatible aliases, but will be removed in v2.0.0 (Q1 2026).
| Old Name (Deprecated) | New Name (MCP-compliant) | Notes |
|---|---|---|
records_search | search_records | Verb-first pattern |
records_get_details | get_record_details | Verb-first pattern |
records_get_attributes | get_record_attributes | Verb-first pattern |
records_discover_attributes | discover_record_attributes | Verb-first pattern |
records_search_advanced | search_records_advanced | Verb-first pattern |
records_search_by_relationship | search_records_by_relationship | Verb-first pattern |
records_search_by_content | search_records_by_content | Verb-first pattern |
records_search_by_timeframe | search_records_by_timeframe | Verb-first pattern |
records_batch | batch_records | Verb-first pattern |
search-records | search_records | snake_case format |
get-record-details | get_record_details | snake_case format |
create-record | create_record | snake_case format |
update-record | update_record | snake_case format |
delete-record | delete_record | snake_case format |
create-note | create_note | snake_case format |
list-notes | list_notes | snake_case format |
smithery-debug-config | smithery_debug_config | snake_case format |
Action Required: Update your integrations to use new tool names before Q1 2026. See MIGRATION-GUIDE.md for the complete migration table.
The server supports two authentication methods—both use the same Bearer token scheme:
| Method | Environment Variable | Best For |
|---|---|---|
| API Key (recommended) | ATTIO_API_KEY | Long-term integrations, personal use |
| OAuth Access Token | ATTIO_ACCESS_TOKEN | OAuth integrations, third-party apps |
Note: If both are set,
ATTIO_API_KEYtakes precedence.OAuth Users: For detailed setup including PKCE flow and token refresh, see OAuth Authentication Guide.
# Option 1: API Key (recommended for most users)
export ATTIO_API_KEY="your_api_key_here"
# Option 2: OAuth Access Token (for OAuth integrations)
# export ATTIO_ACCESS_TOKEN="your_oauth_access_token_here"
export ATTIO_WORKSPACE_ID="your_workspace_id_here"
# Optional: Deal defaults configuration
export ATTIO_DEFAULT_DEAL_STAGE="Interested" # Default stage for new deals
export ATTIO_DEFAULT_DEAL_OWNER="user@company.com" # Default owner email address (see below)
export ATTIO_DEFAULT_CURRENCY="USD" # Default currency for deal values
# Test the MCP server
attio-mcp --help
# Discover your Attio workspace attributes
attio-discover attributes
The MCP server uses field mapping files to translate between natural language and Attio's API field names. This configuration is essential for proper operation.
# 1. Copy the sample configuration to create your user config
cp configs/runtime/mappings/sample.json configs/runtime/mappings/user.json
# 2. Edit user.json to match your workspace's custom fields
# Focus on the "objects.companies" and "objects.people" sections
configs/runtime/mappings/)default.json - Standard Attio CRM fields (loaded first, don't edit)sample.json - Examples with custom field templates (copy from this, not used at runtime)user.json - YOUR workspace-specific overrides (merged on top of default.json)💡 Key Insight:
user.jsonis merged on top ofdefault.json, so only include overrides and additions. Don't duplicate mappings that already exist indefault.json.
The MCP server loads configuration in this order:
default.json - Contains all standard Attio fields (Name, Description, Team, etc.)user.json - Your custom additions/overrides are merged on topExample: If default.json has "Name": "name" and your user.json also has "Name": "name", that's wasted tokens. Only include fields that are:
{
"mappings": {
"attributes": {
"objects": {
"companies": {
"// Only your custom fields - defaults are inherited": "",
"Lead Score": "lead_score",
"B2B Segment": "b2b_segment",
"Industry Vertical": "custom_industry_field"
}
}
},
"lists": {
"// Only your specific lists": "",
"Sales Pipeline": "your-pipeline-list-id"
}
}
}
✅ Good: Only custom/override fields
❌ Wasteful: Duplicating standard fields from default.json
⚠️ Without proper mapping configuration, the MCP server may not work correctly with your custom fields and lists.
Next: Verify your field mappings work by testing with Claude:
"Find companies in our pipeline with lead score > 80"
Add to your Claude Desktop MCP configuration:
Deal Owner Email (for deal owner defaults):
The ATTIO_DEFAULT_DEAL_OWNER should be set to the email address of the workspace member who should own new deals by default. This is typically your own email address or the email address of your sales team lead.
# Example:
export ATTIO_DEFAULT_DEAL_OWNER="john.smith@company.com"
Note: The system will automatically resolve email addresses to workspace member references when creating deals.
Deal Stages:
Deal stages are specific to your workspace. Check your Attio workspace settings or use the discover-attributes command to find available stages for deals.
{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here",
"ATTIO_WORKSPACE_ID": "your_workspace_id_here",
"ATTIO_DEFAULT_DEAL_STAGE": "Interested",
"ATTIO_DEFAULT_DEAL_OWNER": "user@company.com",
"ATTIO_DEFAULT_CURRENCY": "USD"
}
}
}
}
"Find all companies in the AI space with 50+ employees that we haven't contacted in 30 days"
"Show me all prospects added yesterday"
"Find companies created in the last 7 days with revenue over $10M"
"Create a task to follow up with Microsoft about the enterprise deal"
"Add John Smith from Google to our Q1 prospect list"
"Create a list of all SaaS companies who opened our last 3 emails but haven't responded"
"Show me engagement metrics for our outbound campaign this month"
"Add all attendees from the conference to our nurture sequence"
"Show me all enterprise customers with upcoming renewal dates in Q1"
"Create tasks for check-ins with accounts that haven't been contacted in 60 days"
"Find all customers who mentioned pricing concerns in recent notes"
"Update all companies with missing industry data based on their domains"
"Export all contacts added this quarter to CSV"
"Merge duplicate company records for Acme Corporation"
This package is published with npm provenance, creating a verifiable chain from source code to published artifact. Verify a release:
# Check provenance attestation on any published version
npm view attio-mcp --json | jq .attestations
# With pnpm (v10+), enforce trust policy at install time
# pnpm trustPolicy: no-downgrade blocks packages published with weaker credentials
For maximum supply chain protection, install with pnpm v10+ which enforces:
trustPolicy: no-downgrade — blocks versions published with weaker credentials than prior versionsminimumReleaseAge — cooldown period before new versions can be installedComprehensive documentation is available in the docs directory:
⚠️ Note: Universal tools documentation is currently being updated to match the latest implementation. Use the API directly or check the source code for the most accurate interface definitions.
📋 Implementation Status: These docs describe the Attio API endpoints. For MCP tool usage, refer to universal tools documentation above.
git clone https://github.com/kesslerio/attio-mcp-server.git
cd attio-mcp-server
npm install
npm run build
npm run test:offline
For local development and testing with Smithery Playground:
npm run dev # Opens Smithery Playground with local server
See docs/deployment/smithery-cli-setup.md for detailed Smithery CLI development setup.
npm test # Run all tests
npm run test:offline # Run only offline tests (no API required)
npm run test:integration # Integration tests (requires ATTIO_API_KEY)
npm run e2e # E2E tests (requires ATTIO_API_KEY)
For E2E/integration tests, create .env with your ATTIO_API_KEY. See the Testing Guide for detailed setup.
npm run build # Build TypeScript
npm run test # Run all tests
npm run test:offline # Run tests without API calls
npm run analyze:token-footprint # Generate baseline MCP token footprint report
npm run lint # Check code style
npm run check # Full quality check
npm run setup:test-data # Create test data for integration tests
We welcome contributions! Please see our Contributing Guidelines for details on:
This initial release provides a solid foundation for CRM automation.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Original Work Attribution: This project is based on initial work by @hmk under BSD-3-Clause license, with substantial modifications and enhancements by @kesslerio. The original BSD license notice is preserved in the LICENSE file as required.
Ready to transform your CRM workflow? Install Attio MCP Server today and experience the future of CRM automation with AI!
npm install -g attio-mcp
ATTIO_API_KEY*secretYour Attio API key (required for all tools except health-check)
ATTIO_WORKSPACE_IDOptional Attio workspace ID for workspace-specific operations
ATTIO_MCP_TOOL_MODETool mode: 'full' (all tools) or 'search' (search tools only). Default: 'full'
MCP_LOG_LEVELLogging level: 'DEBUG', 'INFO', 'WARN', 'ERROR'. Default: 'INFO'
explorium-ai/vibeprospecting-mcp
io.github.compuute/lead-enrichment
dev.workers.selbyventurecap.cf-worker/apollo-salesforce-mapper
io.github.br0ski777/company-enrichment
com.mcparmory/apollo
mambalabsdev/mcp-gtm-tech-stack-signal-scraper