AttioBLOCK
Attio Model Context Protocol (MCP) server implementation
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://mseep.ai/app/kesslerio-attio-mcp-server)
[](LICENSE) [](https://badge.fury.io/js/attio-mcp) [](https://nodejs.org/) [](https://github.com/kesslerio/attio-mcp-server/releases) [](https://deepwiki.com/kesslerio/attio-mcp-server) [](https://www.npmjs.com/package/attio-mcp)
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.
🎯 What is Attio MCP Server?
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"
🚀 ChatGPT Developer Mode Integration
⚠️ 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)](#tier-4-cloudflare-worker-remote-deplo
9b88dd29e703OBSERVED · 2026-10-07Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add attio-mcp --env ATTIO_API_KEY=${ATTIO_API_KEY} -- npx -y [email protected]Exposed tools (138)
109 read · 24 write · 5 destructive. Blast radius: 5 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
Company | read | automation systems |
Prospects | read | Prospect list |
add_to_list.v1 | write | Add person/company record(s) to a chosen List by exact name or ID. |
advance_deal.v1 | write | Move a deal to a target stage with optional next action + task creation. |
advanced-search-companies | read | Search for companies in your CRM using advanced filtering capabilities |
advanced-search-people | read | Search for people in your CRM using advanced filtering capabilities (contacts, leads, team members) |
batch-create-companies | write | Create multiple companies in a single batch operation |
batch-create-records | write | Create multiple CRM records in a single batch operation (bulk import companies, people, etc.) |
batch-delete-companies | destructive | Delete multiple companies in a single batch operation |
batch-get-company-details | read | Get details for multiple companies in a single batch operation |
batch-search-companies | read | Perform multiple company searches in a single batch operation |
batch-update-companies | write | Update multiple companies in a single batch operation |
batch-update-records | write | Update multiple CRM records in a single batch operation (bulk update companies, people, etc.) |
company_search.v1 | read | Query companies by domain, plan, segment with slim fields. Returns compact table with id, name, domain, industry, employee_count. |
concurrent_list_modifications | read | Simultaneous modifications to list membership |
content | read | content |
create-company | write | Create a new company record in your CRM (Attio) |
create-company-note | write | Create a note for a specific company |
create-deal-note | write | Create a note for a specific deal |
create-person | write | Create a new person record in your CRM (Attio) |
create-person-note | write | Create a note for a specific person |
create-record | write | Create a new CRM record in Attio (company, person, etc.) |
create-task | write | Create a new CRM task (follow-up, meeting, sales activity) |
create_follow_up | write | Suggest follow-up task (default false) |
create_task | write | Create next-action task (default false) |
create_task.v1 | write | Create a task linked to record(s); natural-language due date; priority/owner. |
deal | read | Deal URL, ID, or |
deal_search.v1 | read | Filter deals by owner, stage, value, close date window. Returns summary table with key deal metrics. |
delete-company | destructive | Delete a company record from your CRM (Attio) |
delete-record | destructive | Delete a specific record |
delete-task | destructive | Delete a CRM task from the workspace |
dependent_resource_missing | read | Reference to non-existent dependent resources |
discover-company-attributes | read | Discover all available company attributes in the workspace |
dry_run | write | Only propose, don |
due_date | read | Natural language due date |
empty_arrays_and_objects | read | Test with empty collections where content expected |
empty_required_fields | read | Test with empty or null required fields |
execute-prompt | write | Execute a prompt with provided parameters |
extremely_long_strings | read | Test with strings exceeding reasonable limits |
fields_preset | read | sales_short | full (default sales_short) |
fixture-tool-one | read | Example tool that demonstrates counting. |
fixture-tool-two | read | Example tool with two properties. |
format | read | table | json | ids (default table) |
framework | read | bant | champ (default bant) |
get-company-attributes | read | Get all available attributes for a company or the value of a specific attribute |
get-company-basic-info | read | Get basic information about a company |
get-company-business-info | read | Get business information about a company |
get-company-contact-info | read | Get contact information for a company |
get-company-custom-fields | read | Get custom fields for a company |
get-company-details | read | Get details of a company |
get-company-fields | read | Get specific fields from a company by field names |
get-company-json | read | Get raw JSON representation of a company |
get-company-lists | read | Get lists that a company belongs to |
get-company-notes | read | Get notes for a company |
get-company-social-info | read | Get social media information for a company |
get-company-team | read | Get all team members (people) associated with a company, with bidirectional consistency validation. Shows warnings for inconsistent relationships. |
get-deal-notes | read | Get notes for a deal |
get-person-companies | read | Get all companies that a person is associated with, with bidirectional consistency validation. Shows warnings for inconsistent relationships. |
get-person-details | read | Get details of a person |
get-person-notes | read | Get notes for a person |
get-prompt-details | read | Get details for a specific prompt |
get-record-details | read | Get details of a specific CRM record (company, person, etc.) |
icp_preset | read | Optional ICP preset (e.g., |
inconsistent_state_recovery | read | Recovery from inconsistent data states |
invalid_uuid_format | read | Test with malformed UUID identifiers |
limit | read | Default ${SEARCH_DEFAULTS.limit} (max ${SEARCH_DEFAULTS.maxLimit}) |
limit_web | read | Max pages (default ${WEB_RESEARCH_LIMITS.defaultLimitWeb}, max ${WEB_RESEARCH_LIMITS.maxLimitWeb}) |
link-record-to-task | read | Link a record to a task |
list | read | List name or ID |
list-prompt-categories | read | List all available prompt categories |
list-prompts | read | List all available prompts or filter by category |
list-records | read | List CRM records with filtering options (companies, people, etc.) |
list-tasks | read | List CRM tasks in the workspace (follow-ups, meetings, sales activities) |
list_entries_add | write | [DEPRECATED] This tool has been consolidated into |
list_entries_filter | read | 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: { |
list_entries_filter_advanced | read | [DEPRECATED] This tool has been consolidated into |
list_entries_filter_by_parent | read | [DEPRECATED] This tool has been consolidated into |
list_entries_filter_by_parent_id | read | [DEPRECATED] This tool has been consolidated into |
list_entries_remove | destructive | [DEPRECATED] This tool has been consolidated into |
list_entries_update | write | [DEPRECATED] This tool has been consolidated into |
log_activity.v1 | read | Append a call/meeting note/email summary to a Person, Company, or Deal. Asks for confirmation before write. |
malformed_json_structure | read | Test with deeply nested malformed structures |
maximum_safe_integer_overflow | read | Test with extremely large numeric values |
meeting_prep.v1 | read | Summarize last notes, open tasks, related deals, and suggested agenda for a contact/company. |
negative_numeric_values | read | Test with negative values where positive expected |
network_timeout_recovery | read | Simulate network timeouts and recovery |
owner | read | Task assignee (default @me) |
paginated-search-people | read | Search for people using advanced filtering capabilities with pagination |
paginated-search-people-by-activity | read | Search for people by their activity history with pagination |
paginated-search-people-by-creation-date | read | Search for people by their creation date with pagination |
paginated-search-people-by-last-interaction | read | Search for people by their last interaction date with pagination |
paginated-search-people-by-modification-date | read | Search for people by their last modification date with pagination |
partial_data_corruption | read | Handle partially corrupted data gracefully |
people_search.v1 | read | Search people by title, company, territory, or free text. Return a compact table with id, name, title, company, email, and owner. |
pipeline_health.v1 | read | Owner/segment-scoped snapshot (created/won/slipped; risk flags) with recommended actions. |
priority | read | low | medium | high (default medium) |
qualify_lead.v1 | read | Resolve a lead, scan 2-3 web sources, return a BANT/CHAMP summary with evidence, and propose next actions. |
query | read | E.g., |
rapid_successive_updates | read | Rapid updates to the same record |
rate_limit_exceeding | read | Exceed API rate limits with rapid requests |
records | read | Comma-separated person/company records or |
resource_exhaustion | read | Test behavior under resource exhaustion |
search-companies | read | Search for companies in your CRM (Attio) with automatic domain prioritization. Supports company names, domains, URLs, and email addresses. When a domain is detected, results are prioritized by domain matches for better accuracy. |
search-companies-by-domain | read | Search for companies in your CRM by domain/website. Provides exact domain-based matching for highest accuracy. |
search-companies-by-notes | read | Search for companies that have notes containing specific text |
search-companies-by-people | read | Search for companies based on attributes of their associated people |
search-companies-by-people-list | read | Search for companies that have employees in a specific list |
search-people | read | Search for people in your CRM (Attio) |
search-people-by-activity | read | Search for people by their activity history |
search-people-by-company | read | Search for people based on attributes of their associated companies |
search-people-by-company-list | read | Search for people who work at companies in a specific list |
search-people-by-creation-date | read | Search for people by their creation date |
search-people-by-email | read | Search for people by email in your CRM (Attio) |
search-people-by-last-interaction | read | Search for people by their last interaction date |
search-people-by-modification-date | read | Search for people by their last modification date |
search-people-by-notes | read | Search for people that have notes containing specific text |
search-people-by-phone | read | Search for people by phone number in your CRM (Attio) |
segment | read | Optional segment/pipeline filter |
simultaneous_record_creation | read | Multiple clients creating records with same identifiers |
special_characters_injection | read | Test with special characters and potential injection attempts |
summary | read | Plain-text activity synopsis |
target | read | Optional: Record to link task to |
target_stage | read | Target stage name |
test | read | A test list |
testing | read | A testing list |
timeframe | read | Timeframe (default 30d) |
title | read | Task title/subject |
transaction_rollback | read | Test transaction rollback on partial failures |
type | read | call | meeting | email | note |
type_mismatch | read | Test with wrong data types |
unicode_boundary_characters | read | Test with Unicode boundary and control characters |
update-company | write | Update an existing company record in your CRM (Attio) |
update-company-attribute | write | Update a specific attribute of a company |
update-record | write | Update a specific CRM record (company, person, etc.) |
update-task | write | Update an existing CRM task (change status, due date, assignment) |
verbosity | read | brief | normal (default brief) |
visibility | read | internal | shared (default internal) |
田中太郎 | read | Test with 中文字符 and emoji 🎉 |
Trust audit
BLOCKgrade F · trust 34/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (3 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (4 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
/.env" ... curl
"force": false // Optional: bypass safety checks
IMPORTANT: Always include both 'content' and 'title' fields to avoid "Unnamed" display
validate_workflow.cpython-312.pyc
console.log(` API token match: ${JSON.stringify(company.created_by)}`);console.log(` API token matches: ${apiTokenMatches} out of ${totalChecked} records`);console.log(`✓ API Key loaded (${API_KEY.length} characters)`);const TOKEN = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
const TOKEN = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
secret: 'config-api-key-1234567890',
secret: 'config-access-token-1234567890',
secret: 'env-api-key-1234567890',
'API key sk_live_abcd1234efgh5678 is invalid',
batch-delete-companies, delete-company, delete-record, delete-task, list_entries_remove
.env.docker
.env.test.example
.cleanup-whitelist.json
.Rhistory
AGENTS.md
GEMINI.md
logger.warn('Sensitive debug', { password: 'hunter2' });ln -sf "../../build/hooks/pre-commit" .git/hooks/pre-commit
ln -sf "../../build/hooks/prepare-commit-msg" .git/hooks/prepare-commit-msg
import { getToolsListPayload } from '../../../dist/utils/mcp-discovery.js';import { executeToolRequest } from '../../../dist/handlers/tools/dispatcher.js';Gates applied: instruction_override, no_behavioural_pass.
9b88dd29e703full audit observations/trust-audit/mcp-server/kesslerio__attio-3.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 9b88dd29e703 | BLOCK | F | 34 | first audit |
Questions
What is the Attio MCP server?
Attio Model Context Protocol (MCP) server implementation
What tools does Attio expose?
138 in total: 109 read-only, 24 that write, and 5 that can delete or overwrite (batch-delete-companies, delete-company, delete-record, delete-task, list_entries_remove). Every one is listed on this page with its risk.
Is Attio safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (34/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 5 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Attio need?
It reads ATTIO_ACCESS_TOKEN, ATTIO_API_KEY, ATTIO_REFRESH_TOKEN, MAX_PROMPT_TOKENS, MCP_REMOTE_AUTH_TOKEN, TOKEN_FOOTPRINT_THRESHOLD and TOKEN_FOOTPRINT_TOP_N from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Attio run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @attio-mcp/core at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (9b88dd29e703), read on 2026-10-07. The repository is watched and re-audited when it changes.