Atlas / MCP servers / kesslerio / Attio

AttioBLOCK

mcp/kesslerio/attio-3

Attio Model Context Protocol (MCP) server implementation

Verdict
BLOCK
Grade
F
Trust score
34 /100
Exposed tools
138 109r · 24w · 5d
Transport
stdio · streamable-http
License
NOASSERTION
Stars
69
01

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
Read from source at commit 9b88dd29e703OBSERVED · 2026-10-07
Advertisement
02

Connect

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-code (npm)
claude mcp add attio-mcp --env ATTIO_API_KEY=${ATTIO_API_KEY} -- npx -y [email protected]
03

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.

ToolRiskDescription
Companyreadautomation systems
ProspectsreadProspect list
add_to_list.v1writeAdd person/company record(s) to a chosen List by exact name or ID.
advance_deal.v1writeMove a deal to a target stage with optional next action + task creation.
advanced-search-companiesreadSearch for companies in your CRM using advanced filtering capabilities
advanced-search-peoplereadSearch for people in your CRM using advanced filtering capabilities (contacts, leads, team members)
batch-create-companieswriteCreate multiple companies in a single batch operation
batch-create-recordswriteCreate multiple CRM records in a single batch operation (bulk import companies, people, etc.)
batch-delete-companiesdestructiveDelete multiple companies in a single batch operation
batch-get-company-detailsreadGet details for multiple companies in a single batch operation
batch-search-companiesreadPerform multiple company searches in a single batch operation
batch-update-companieswriteUpdate multiple companies in a single batch operation
batch-update-recordswriteUpdate multiple CRM records in a single batch operation (bulk update companies, people, etc.)
company_search.v1readQuery companies by domain, plan, segment with slim fields. Returns compact table with id, name, domain, industry, employee_count.
concurrent_list_modificationsreadSimultaneous modifications to list membership
contentreadcontent
create-companywriteCreate a new company record in your CRM (Attio)
create-company-notewriteCreate a note for a specific company
create-deal-notewriteCreate a note for a specific deal
create-personwriteCreate a new person record in your CRM (Attio)
create-person-notewriteCreate a note for a specific person
create-recordwriteCreate a new CRM record in Attio (company, person, etc.)
create-taskwriteCreate a new CRM task (follow-up, meeting, sales activity)
create_follow_upwriteSuggest follow-up task (default false)
create_taskwriteCreate next-action task (default false)
create_task.v1writeCreate a task linked to record(s); natural-language due date; priority/owner.
dealreadDeal URL, ID, or
deal_search.v1readFilter deals by owner, stage, value, close date window. Returns summary table with key deal metrics.
delete-companydestructiveDelete a company record from your CRM (Attio)
delete-recorddestructiveDelete a specific record
delete-taskdestructiveDelete a CRM task from the workspace
dependent_resource_missingreadReference to non-existent dependent resources
discover-company-attributesreadDiscover all available company attributes in the workspace
dry_runwriteOnly propose, don
due_datereadNatural language due date
empty_arrays_and_objectsreadTest with empty collections where content expected
empty_required_fieldsreadTest with empty or null required fields
execute-promptwriteExecute a prompt with provided parameters
extremely_long_stringsreadTest with strings exceeding reasonable limits
fields_presetreadsales_short | full (default sales_short)
fixture-tool-onereadExample tool that demonstrates counting.
fixture-tool-tworeadExample tool with two properties.
formatreadtable | json | ids (default table)
frameworkreadbant | champ (default bant)
get-company-attributesreadGet all available attributes for a company or the value of a specific attribute
get-company-basic-inforeadGet basic information about a company
get-company-business-inforeadGet business information about a company
get-company-contact-inforeadGet contact information for a company
get-company-custom-fieldsreadGet custom fields for a company
get-company-detailsreadGet details of a company
get-company-fieldsreadGet specific fields from a company by field names
get-company-jsonreadGet raw JSON representation of a company
get-company-listsreadGet lists that a company belongs to
get-company-notesreadGet notes for a company
get-company-social-inforeadGet social media information for a company
get-company-teamreadGet all team members (people) associated with a company, with bidirectional consistency validation. Shows warnings for inconsistent relationships.
get-deal-notesreadGet notes for a deal
get-person-companiesreadGet all companies that a person is associated with, with bidirectional consistency validation. Shows warnings for inconsistent relationships.
get-person-detailsreadGet details of a person
get-person-notesreadGet notes for a person
get-prompt-detailsreadGet details for a specific prompt
get-record-detailsreadGet details of a specific CRM record (company, person, etc.)
icp_presetreadOptional ICP preset (e.g.,
inconsistent_state_recoveryreadRecovery from inconsistent data states
invalid_uuid_formatreadTest with malformed UUID identifiers
limitreadDefault ${SEARCH_DEFAULTS.limit} (max ${SEARCH_DEFAULTS.maxLimit})
limit_webreadMax pages (default ${WEB_RESEARCH_LIMITS.defaultLimitWeb}, max ${WEB_RESEARCH_LIMITS.maxLimitWeb})
link-record-to-taskreadLink a record to a task
listreadList name or ID
list-prompt-categoriesreadList all available prompt categories
list-promptsreadList all available prompts or filter by category
list-recordsreadList CRM records with filtering options (companies, people, etc.)
list-tasksreadList CRM tasks in the workspace (follow-ups, meetings, sales activities)
list_entries_addwrite[DEPRECATED] This tool has been consolidated into
list_entries_filterreadFilter 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_advancedread[DEPRECATED] This tool has been consolidated into
list_entries_filter_by_parentread[DEPRECATED] This tool has been consolidated into
list_entries_filter_by_parent_idread[DEPRECATED] This tool has been consolidated into
list_entries_removedestructive[DEPRECATED] This tool has been consolidated into
list_entries_updatewrite[DEPRECATED] This tool has been consolidated into
log_activity.v1readAppend a call/meeting note/email summary to a Person, Company, or Deal. Asks for confirmation before write.
malformed_json_structurereadTest with deeply nested malformed structures
maximum_safe_integer_overflowreadTest with extremely large numeric values
meeting_prep.v1readSummarize last notes, open tasks, related deals, and suggested agenda for a contact/company.
negative_numeric_valuesreadTest with negative values where positive expected
network_timeout_recoveryreadSimulate network timeouts and recovery
ownerreadTask assignee (default @me)
paginated-search-peoplereadSearch for people using advanced filtering capabilities with pagination
paginated-search-people-by-activityreadSearch for people by their activity history with pagination
paginated-search-people-by-creation-datereadSearch for people by their creation date with pagination
paginated-search-people-by-last-interactionreadSearch for people by their last interaction date with pagination
paginated-search-people-by-modification-datereadSearch for people by their last modification date with pagination
partial_data_corruptionreadHandle partially corrupted data gracefully
people_search.v1readSearch people by title, company, territory, or free text. Return a compact table with id, name, title, company, email, and owner.
pipeline_health.v1readOwner/segment-scoped snapshot (created/won/slipped; risk flags) with recommended actions.
priorityreadlow | medium | high (default medium)
qualify_lead.v1readResolve a lead, scan 2-3 web sources, return a BANT/CHAMP summary with evidence, and propose next actions.
queryreadE.g.,
rapid_successive_updatesreadRapid updates to the same record
rate_limit_exceedingreadExceed API rate limits with rapid requests
recordsreadComma-separated person/company records or
resource_exhaustionreadTest behavior under resource exhaustion
search-companiesreadSearch 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-domainreadSearch for companies in your CRM by domain/website. Provides exact domain-based matching for highest accuracy.
search-companies-by-notesreadSearch for companies that have notes containing specific text
search-companies-by-peoplereadSearch for companies based on attributes of their associated people
search-companies-by-people-listreadSearch for companies that have employees in a specific list
search-peoplereadSearch for people in your CRM (Attio)
search-people-by-activityreadSearch for people by their activity history
search-people-by-companyreadSearch for people based on attributes of their associated companies
search-people-by-company-listreadSearch for people who work at companies in a specific list
search-people-by-creation-datereadSearch for people by their creation date
search-people-by-emailreadSearch for people by email in your CRM (Attio)
search-people-by-last-interactionreadSearch for people by their last interaction date
search-people-by-modification-datereadSearch for people by their last modification date
search-people-by-notesreadSearch for people that have notes containing specific text
search-people-by-phonereadSearch for people by phone number in your CRM (Attio)
segmentreadOptional segment/pipeline filter
simultaneous_record_creationreadMultiple clients creating records with same identifiers
special_characters_injectionreadTest with special characters and potential injection attempts
summaryreadPlain-text activity synopsis
targetreadOptional: Record to link task to
target_stagereadTarget stage name
testreadA test list
testingreadA testing list
timeframereadTimeframe (default 30d)
titlereadTask title/subject
transaction_rollbackreadTest transaction rollback on partial failures
typereadcall | meeting | email | note
type_mismatchreadTest with wrong data types
unicode_boundary_charactersreadTest with Unicode boundary and control characters
update-companywriteUpdate an existing company record in your CRM (Attio)
update-company-attributewriteUpdate a specific attribute of a company
update-recordwriteUpdate a specific CRM record (company, person, etc.)
update-taskwriteUpdate an existing CRM task (change status, due date, assignment)
verbosityreadbrief | normal (default brief)
visibilityreadinternal | shared (default internal)
田中太郎readTest with 中文字符 and emoji 🎉
04

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.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
scripts/e2e-health-check.sh:86
/.env" ... curl
Why it matters. reads secrets in the same file that sends data out
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
docs/tools/attio-tools-reference.md:175
"force": false // Optional: bypass safety checks
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.tool_poisoning · CWE-94, CWE-1427
docs/usage/universal-tools-quick-reference.md:103
IMPORTANT: Always include both 'content' and 'title' fields to avoid "Unnamed" display
Why it matters. a tool description carrying instructions to the agent
Fix. tool descriptions describe the tool; nothing else
MEDIUMInventory / provenance · inv.binary · CWE-1104
build/__pycache__/validate_workflow.cpython-312.pyc
validate_workflow.cpython-312.pyc
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/debug/find-missing-companies.ts:76
console.log(`      API token match: ${JSON.stringify(company.created_by)}`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/debug/find-missing-companies.ts:103
console.log(`   API token matches: ${apiTokenMatches} out of ${totalChecked} records`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/test-attio-operators.mjs:17
console.log(`✓ API Key loaded (${API_KEY.length} characters)`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/scripts/cleanup-resources.test.ts:25
const TOKEN = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/scripts/cleanup-safety-gate.test.ts:24
const TOKEN = 'f47ac10b-58cc-4372-a567-0e02b2c3d479';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/smithery.test.ts:107
secret: 'config-api-key-1234567890',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/smithery.test.ts:117
secret: 'config-access-token-1234567890',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/smithery.test.ts:128
secret: 'env-api-key-1234567890',
MEDIUMHard-coded secrets · secret.stripe · CWE-798, CWE-321
test/utils/error-sanitizer.test.ts:282
'API key sk_live_abcd1234efgh5678 is invalid',
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
batch-delete-companies, delete-company, delete-record, delete-task, list_entries_remove
Why it matters. 5 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.docker
.env.docker
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.env.test.example
.env.test.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
scripts/cleanup/.cleanup-whitelist.json
.cleanup-whitelist.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
scripts/debug/.Rhistory
.Rhistory
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.symlink · CWE-1104
AGENTS.md
AGENTS.md
Why it matters. link not followed
LOWInventory / provenance · inv.symlink · CWE-1104
GEMINI.md
GEMINI.md
Why it matters. link not followed
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
test/unit/utils/secure-logger.test.ts:114
logger.warn('Sensitive debug', { password: 'hunter2' });
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
build/install-hooks.sh:61
ln -sf "../../build/hooks/pre-commit" .git/hooks/pre-commit
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
build/install-hooks.sh:62
ln -sf "../../build/hooks/prepare-commit-msg" .git/hooks/prepare-commit-msg
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/cloudflare-mcp-server/src/mcp-handler.ts:9
import { getToolsListPayload } from '../../../dist/utils/mcp-discovery.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/cloudflare-mcp-server/src/mcp-handler.ts:10
import { executeToolRequest } from '../../../dist/handlers/tools/dispatcher.js';

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-07 · audit v0.4.1 · source sha 9b88dd29e703full audit observations/trust-audit/mcp-server/kesslerio__attio-3.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-079b88dd29e703BLOCKF34first audit
06

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.

Advertisement