philglazer/attio-mcp
If you are the rightful owner of attio-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Attio MCP Server is a production-quality Model Context Protocol server designed for Attio CRM, enabling AI assistants like Claude to interact with Attio workspaces.
Attio MCP Server
A production-quality Model Context Protocol (MCP) server for Attio CRM. Enables Claude and other AI assistants to interact with your Attio workspace - search companies and people, access meeting transcripts, read notes, and more.
Features
- 🏢 Company & People Management: Search, fetch, and explore company/people records
- 📞 Meeting & Transcripts: Access meeting data and call transcripts
- 📝 Notes & Comments: Read and create notes on any record
- 📋 Lists: Query list entries and manage workflows
- 🔍 Smart Search: Fuzzy search across companies, people, and deals
- ⚡ Performance: Built-in rate limiting, caching, and retry logic
- 🔐 Multi-workspace: Support for multiple Attio workspaces
- 🎯 Best Practices: Follows MCP specification and SDK patterns
Installation
Quick Start (npx)
The easiest way to use this MCP server with Claude Code:
claude mcp add --transport stdio attio -- npx -y attio-mcp
Then set your Attio API token in the environment config.
Local Installation
npm install -g attio-mcp
Or clone and build from source:
git clone https://github.com/philglazer/attio-mcp.git
cd attio-mcp
npm install
npm run build
Configuration
Get Your Attio API Token
- Go to Attio Settings > API
- Create a new API token with the required scopes:
record_permission:read-writeobject_configuration:readmeeting:readcall_recording:readnote:read-write
Environment Variables
Create a .env file or set environment variables:
# Required
ATTIO_API_TOKEN=your_token_here
# Optional
MCP_MODE=stdio # or "http" for remote server
PORT=3000 # For HTTP mode
LOG_LEVEL=info # debug, info, warn, error
ATTIO_MAX_CONCURRENCY=4
Usage
With Claude Code
Add to your Claude Code MCP configuration:
stdio mode (recommended for local use):
{
"mcpServers": {
"attio": {
"type": "stdio",
"command": "npx",
"args": ["-y", "attio-mcp"],
"env": {
"ATTIO_API_TOKEN": "your_token_here"
}
}
}
}
HTTP mode (recommended for team/remote use):
{
"mcpServers": {
"attio": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
Standalone
stdio mode:
npm run dev:stdio
HTTP mode:
npm run dev:http
Available Tools
Companies
search_companies- Search companies by name or domainget_company- Get detailed company informationget_company_context- Get company with related people, notes, and meetings (returns resource links)
People
search_people- Search people by name, email, or companyget_person- Get detailed person information
Meetings & Transcripts
list_meetings- List meetings by company, person, or date rangeget_meeting- Get meeting detailslist_meeting_recordings- List call recordings for a meetingget_meeting_transcript- Fetch call transcript (supports pagination)
Notes
list_notes- List notes by parent record (company, person, meeting)create_note- Create a new note (requires confirmation)
Lists
get_list- Get list metadatalist_list_entries- Query entries in a list
Deals
search_deals- Search deals by company, stage, or query
Resources
The server exposes Attio data as MCP resources with URI scheme:
attio://companies/{company_id}attio://companies/{company_id}/peopleattio://companies/{company_id}/notesattio://people/{person_id}attio://meetings/{meeting_id}attio://meetings/{meeting_id}/transcript/{call_recording_id}attio://deals/{deal_id}
Resources provide fetchable context for large datasets (like transcripts) without overwhelming the tool response.
Example Conversations
"Show me all companies in the agriculture sector"
Claude will use: search_companies(q="agriculture")
"Get the latest call transcript for Teays River"
Claude will:
1. search_companies(domain="teaysinvestments.com")
2. list_meetings(company_id="...")
3. get_meeting_transcript(meeting_id="...", call_recording_id="...")
"Summarize recent interactions with ACME Corp"
Claude will:
1. search_companies(domain="acme.com")
2. get_company_context(company_id="...") → returns resource links
3. Fetch resources for meetings, notes, transcripts as needed
Development
Project Structure
attio-mcp/
├── src/
│ ├── server.ts # Main entry point, transport setup
│ ├── attio/
│ │ ├── client.ts # Attio API client with rate limiting
│ │ └── types.ts # TypeScript types for Attio data
│ ├── tools/
│ │ ├── companies.ts # Company-related tools
│ │ ├── people.ts # People-related tools
│ │ ├── meetings.ts # Meeting tools
│ │ ├── transcripts.ts # Transcript tools
│ │ ├── notes.ts # Note tools
│ │ ├── lists.ts # List tools
│ │ └── deals.ts # Deal tools
│ ├── resources/
│ │ └── registry.ts # Resource templates and materializers
│ └── logging/
│ └── logger.ts # Pino logger (stderr only)
├── package.json
├── tsconfig.json
└── README.md
Testing
Use the MCP Inspector to test tools interactively:
npx @modelcontextprotocol/inspector npx -y attio-mcp
Build
npm run build
Best Practices
- Large Results: Tools return resource links for large datasets (transcripts, long lists)
- Progress: Long-running operations emit progress notifications
- Caching: Built-in LRU cache with 60s TTL for read operations
- Rate Limits: Respects Attio's 100 rps (reads) and 25 rps (writes) limits
- Error Handling: Automatic retry with exponential backoff for 429/5xx
- Security: Logs to stderr only, never exposes tokens
Contributing
Contributions welcome! Please open an issue or PR.
License
MIT