Attio MCP Server
The Attio MCP Server provides a Model Context Protocol (MCP) interface for AI-powered CRM automation, enabling natural language interaction with your Attio workspace.
Universal Record Management: Perform comprehensive CRUD operations (create, update, delete, retrieve) across all record types including Companies, People, Deals, Tasks, Lists, and Notes using consistent universal tools
Advanced Search & Filtering: Execute sophisticated queries with universal search, content search, timeframe search, relationship-based search, and advanced multi-condition filters with AND/OR logic
Batch Operations: Efficiently perform bulk create, update, delete, get, and search operations across multiple records
List & Pipeline Management: Create and manage CRM lists, sales pipelines, and lead stages; add/remove records and update list entry attributes like deal stages
Attribute Discovery: Identify and retrieve available fields and categories for any resource type to align with your workspace structure
Workspace Integration: List, search, and retrieve workspace members for task assignments and deal ownership
AI Assistant Integration: Seamlessly integrate with Claude, ChatGPT (Developer Mode), and other AI assistants with built-in MCP safety annotations for automated approval of read operations and confirmation for write operations
Robust Performance: Benefit from optimized operations, automatic pagination, built-in rate limiting, and chunking for large datasets
Custom Field Mapping: Configure custom field and list mappings to align natural language commands with your unique Attio workspace
Server Health Check: Verify server status without requiring credentials using the
aaa-health-checktool
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Attio MCP ServerFind all companies in our Q1 outreach list that haven't been contacted in the last 30 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Attio MCP Server
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"
Related MCP server: Apollo.io MCP Server
🚀 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) for ChatGPT/remote access.
ChatGPT Pro/Plus users can access the Attio toolset through natural language using a self-hosted Cloudflare Worker:
🔐 Built-in Approval Flows: MCP safety annotations auto-approve read operations, request approval for writes
🌐 OAuth Integration: Self-hosted OAuth via Cloudflare Worker deployment
💬 Natural Language CRM: Manage your entire Attio workspace through conversational AI
📖 Setup Guide: See ChatGPT Developer Mode docs and Cloudflare Worker Guide
✨ Core Features & Implementation Status
🎯 Universal Tools Architecture (19 Universal Operations)
Focused Tool Surface: Consolidated 40+ resource-specific tools into universal operations, then added scoped high-frequency write tools for safer company and deal updates.
High Performance: 89.7% speed improvement with 227KB memory reduction (PR #483)
Enterprise Quality: 97.15/100 production readiness score with zero breaking changes
Clean Architecture: Complete production-test separation with mock factory pattern
Scoped Tool Policy: Add scoped default tools only when the workflow is frequent, a generic write can mutate the wrong object class, and the scoped tool removes a model decision instead of merely renaming a universal call
📊 Feature Implementation Status
✅ Complete CRM Surface Coverage
Companies: Search, Create, Update, Delete, Advanced Search, Relationship Search
People: Search, Create, Update, Delete, Advanced Search, Relationship Search
Deals: Full CRUD operations with intelligent field mapping and stage validation
Tasks: Create, Update, Delete, Search with multi-assignee support
Lists: Full CRUD operations, filtering, advanced filtering, entry management
Notes: Create and list operations for all record types
Records: Universal CRUD operations across all resource types
Batch Operations: Create, Update, Delete with chunking and error handling
Content Search: Universal search capabilities across notes, tasks, and lists
Relationship Navigation: Bidirectional company↔person↔deal relationships
Advanced Filtering: Sophisticated query capabilities with intelligent field mapping
📊 Company Management
Universal Search: Find companies with
search_recordsandsearch_records_advancedScoped Writes: Create and update companies with
create_companyandupdate_companyFull CRUD: Create, read, update, and delete with universal record operations when a scoped tool is not available
Relationship Discovery: Find companies through
search_records_by_relationshipBatch Operations: Process hundreds of companies with
batch_recordsDetailed Information: Get contact, business, and social info with
get_record_info
👥 People Management
Universal Contact Search: Find people by any criteria using universal search tools
Relationship Tracking: Link people to companies with
search_records_by_relationshipActivity Timeline: Track interactions with
search_records_by_contentandsearch_records_by_timeframeAdvanced Filtering: Multi-attribute search with universal filtering
Bulk Operations: Efficiently manage contacts with universal batch operations
📋 Lists & Pipeline Management (4 Tools + 8 Deprecated)
Active Tools: 4 consolidated tools with auto-mode detection (Migration Guide)
filter-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 memberships
Deprecated (v2.0.0 removal): 8 legacy tools replaced by consolidated versions
Pipeline Operations: Move deals through sales stages
Smart Segmentation: Create and manage targeted contact lists
Advanced Filtering: Complex multi-condition filtering with AND/OR logic
Entry Management: Add, remove, and update list memberships
Deal Tracking: Monitor opportunities and revenue pipeline
Deal Defaults: Configurable default stage, owner, and currency for streamlined deal creation
Scoped Deal Writes: Create and update deals with
create_dealandupdate_deal
✅ Task Management
Universal Task Operations: Create, update, and manage tasks with universal tools
Record Linking: Associate tasks with any record type using
resource_typeparameterProgress Tracking: Monitor completion with universal search and filtering
Team Coordination: Streamline follow-ups with consistent universal operations
🔧 Advanced Capabilities
Batch Processing: Handle bulk operations with error tracking
Enhanced Filtering: Text, numeric, date, boolean, and relationship filters with timeframe search (Issue #475)
Data Export: JSON serialization for integrations
Real-time Updates: Live data synchronization with Attio
🧠 Claude Skills
Supercharge 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 |
|
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 SkillSee Skills Documentation for complete setup and usage guides.
💬 Pre-Built Prompts (10 Prompts)
Intelligent shortcuts that help Claude work faster with your CRM data:
Search & Find (5): people_search, company_search, deal_search, meeting_prep, pipeline_health
Take Actions (4): log_activity, create_task, advance_deal, add_to_list with dry-run safety
Research & Qualify (1): qualify_lead with automated web research and BANT/CHAMP frameworks
Token-efficient: 300-700 tokens per prompt with consistent formatting
Discoverable: Claude automatically suggests relevant prompts for your tasks
See Using Out-of-the-Box Prompts for detailed documentation and examples.
🎯 Using Out-of-the-Box Prompts
NEW: 10 pre-built MCP prompts for common Sales workflows. No setup required—just use them!
Available Prompts
Prompt | Description | Key Arguments | Example |
| Find people by title, company, territory |
| Find AE in fintech, SF |
| Query companies by domain, segment, plan |
| Find SaaS companies >100 employees |
| Filter deals by owner, stage, value, close date |
| Find deals >$50k closing Q1 |
| Log calls/meetings/emails to records |
| Log call with Nina at Acme |
| Create tasks with natural language due dates |
| Create task: Follow up tomorrow |
| Move deal to target stage with next action |
| Advance deal to "Proposal Sent" |
| Add records to a List by name or ID |
| Add 5 companies to Q1 Outreach |
| Research lead with web + BANT/CHAMP scoring |
| Qualify Acme Corp with BANT |
| 360° prep: notes, tasks, deals, agenda |
| Prep for meeting with Acme CEO |
| Weekly snapshot: created/won/slipped + risks |
| Pipeline health for @me last 30d |
Quick Examples
# 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"Universal Arguments
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 executing
Token Awareness Features
Prompts include built-in token optimization:
Budget Guards: Prompts stay within token limits (people_search <500, qualify_lead <400)
Dev Metadata: Set
MCP_DEV_META=truefor token counts in responsesTelemetry: Set
PROMPT_TELEMETRY_ENABLED=truefor usage loggingConfigurable Limits: Override with
MAX_PROMPT_TOKENSenvironment variable
For complete prompt documentation, see docs/prompts/v1-catalog.md.
⚠️ Known Limitations & Important Notes
Current Limitations
Field Parameter Filtering: Tasks endpoint
/objects/tasks/attributeshas limitations, handled with fallback patternsPagination: Tasks pagination uses in-memory handling due to API constraints
API Compatibility
Universal Tools: Primary interface (19 tools) - recommended for all new integrations
Legacy Tools: Available via
DISABLE_UNIVERSAL_TOOLS=trueenvironment variable (deprecated)Lists API: Fully functional with complete CRUD operations (contrary to some outdated documentation)
🤝 OpenAI MCP Compatibility
Developer Mode Ready: Every tool now publishes MCP safety annotations (
readOnlyHint,destructiveHint) so OpenAI Developer Mode can auto-approve reads and request confirmation for writes.Full Tool Access (Default): All 41 tools are exposed by default (26 universal/OpenAI + 12 list + 3 workspace member). Do NOT set
ATTIO_MCP_TOOL_MODEin Smithery configuration for full access.Search-Only Mode: To restrict to read-only tools (
search,fetch,aaa-health-check), explicitly configureATTIO_MCP_TOOL_MODE: 'search'in Smithery dashboard when Developer Mode is unavailable.Detailed Guide: See docs/chatgpt-developer-mode.md for environment variables, approval flows, and validation tips.
User Documentation: See the ChatGPT Developer Mode docs for a complete walkthrough of approval flows and setup instructions.
Performance Considerations
Batch Operations: Optimized with chunking, rate limiting, and error recovery
Large Datasets: Automatic pagination and field filtering for optimal performance
Rate Limiting: Built-in protection against API rate limits with exponential backoff
For detailed troubleshooting and solutions, see TROUBLESHOOTING.md and GitHub Issues.
🎯 Advanced Search Filters
Build powerful CRM queries with multi-criteria AND/OR filtering. See the Advanced Search Guide for complete examples and operator reference.
🚀 Installation
⚠️ 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 Compatibility
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:
Most users: Use Tier 1 (Shell Installers) - one command, automatic setup
Power users: Use Tier 2 (Manual) - full control over configuration
ChatGPT/Teams/Enterprise: Use Tier 3 (Cloudflare Worker) - self-hosted, multi-user OAuth
Tier 1: Shell Installers
Best for: Developers who prefer local installations with automatic configuration.
One-command scripts that install attio-mcp and configure your client automatically.
Claude Desktop
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-desktop.sh | bashCursor IDE
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-cursor.sh | bashClaude Code (CLI)
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-code.sh | bashThese scripts will:
Install
attio-mcpnpm package globally (if needed)Backup existing configuration files
Prompt for your Attio API key
Configure the MCP server for your client
Print next steps and restart instructions
Tier 2: Manual Configuration
Best for: Power users who prefer full control or use unsupported clients.
Step 1: Install attio-mcp
npm install -g attio-mcpStep 2: Find your config file
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Step 3: Add configuration
{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here"
}
}
}
}Step 4: Restart Claude Desktop completely (quit and reopen)
Step 1: Install attio-mcp
npm install -g attio-mcpStep 2: Edit config file
Location: ~/.cursor/mcp.json
{
"mcpServers": {
"attio-mcp": {
"command": "attio-mcp",
"env": {
"ATTIO_API_KEY": "your_api_key_here"
}
}
}
}Step 3: Restart Cursor
Option A: Using Claude CLI command (recommended)
echo '{"command":"attio-mcp","env":{"ATTIO_API_KEY":"your_key_here"}}' | claude mcp add-json attio-mcp --stdin -s userOption B: Manual config edit
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 buildRun 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-mcpTier 3: Cloudflare Worker (Remote Deployment)
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:
ChatGPT mobile app (iOS/Android)
Claude mobile app (iOS/Android)
Any browser on any device
Cloudflare Worker Features
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 |
Quick Deploy
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 deployClient Configuration
After deployment, configure your client with your Worker URL:
Claude.ai: Settings → Connectors → Add your Worker URL
ChatGPT: Settings → Connectors → Developer Mode → Add Worker URL
See Cloudflare Worker Deployment Guide for:
Complete OAuth 2.1 setup with Attio
Token encryption configuration
Production deployment checklist
Troubleshooting guide
🆕 What's New in v1.4.0
Major Features
🎯 Workspace Schema Skill Generator (#983) - Auto-generate Claude Skills from your Attio workspace schema for error-free field names and options
🔍 Select-field Transformer (#1019) - Case-insensitive matching, partial matching, and UUID pass-through for select/status fields
🛠️ Attio Skill Generator Meta-skill (#1020) - Meta-skill for automatic workspace documentation
📚 Universal Usage Guide Skill (#1018) - Hand-crafted workflow patterns and error prevention
⚙️
get_record_attribute_optionstool (#975) - Get valid options for select/status fields with enhanced error messages📞 Phone validation (#951) - Built-in phone number validation support
⏱️ Configurable option fetch delay - Rate limiting control via
--option-fetch-delayflag
Major Enhancements
🏷️ MCP-compliant tool naming (#1039) - All tools now use
snake_case, verb-first naming (old names work via aliases until v2.0.0)🎨 Custom object display names (#1017) - Fetch display names directly from Attio API
📖 Split integration patterns (#1023) - Progressive discovery patterns by use case
💡 Enhanced attribute error messages (#975) - Levenshtein distance suggestions for typos
Critical Fixes
📝 Note content line breaks preserved (#1052)
👤 People search "Unnamed" display fixed (#1051)
✅ Select field persistence (#1045)
🔗 Record-reference auto-transformation (#997)
📊 Multi-select array auto-transformation (#992)
🛡️ Complex attribute validation (#991)
⚠️ Field persistence false warnings (#995)
📦 SDK dependency pinning (#1025)
💼 Deal stage/UTM validation (#1043)
📍 Location field auto-normalization (#987)
Internal Improvements
Tool alias system refactoring (#1041) - Type-safe constants with pattern-based generation
Strategy Pattern for CRUD error handlers (#1001)
Consolidated metadata fetching (#984)
UniversalUpdateService modularization (#984)
Select transformation type rename (#1055) -
select_title_to_arrayfor clarity
🔄 Migration Guide
Upgrading 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).
Tool Name Changes
Old Name (Deprecated) | New Name (MCP-compliant) | Notes |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| Verb-first pattern |
|
| snake_case format |
|
| snake_case format |
|
| snake_case format |
|
| snake_case format |
|
| snake_case format |
|
| snake_case format |
|
| snake_case format |
|
| 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.
⚡ Quick Start
Prerequisites
Node.js (v18 or higher)
Attio API Key (Get one here) or OAuth access token
Attio Workspace ID
🔐 Authentication Options
The server supports two authentication methods—both use the same Bearer token scheme:
Method | Environment Variable | Best For |
API Key (recommended) |
| Long-term integrations, personal use |
OAuth 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.
1. Set Environment Variables
# 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 values2. Test the Installation
# Test the MCP server
attio-mcp --help
# Discover your Attio workspace attributes
attio-discover attributes3. 🎯 CRITICAL: Configure Field Mappings
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.
Quick Setup
# 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" sectionsConfiguration Files (in 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.
How Configuration Merging Works
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 top
Example: If default.json has "Name": "name" and your user.json also has "Name": "name", that's wasted tokens. Only include fields that are:
New custom fields (not in default.json)
Different mappings (overriding default behavior)
Optimized user.json Example
{
"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"4. Configure Claude Desktop
Add to your Claude Desktop MCP configuration:
Finding Required IDs
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"
}
}
}
}🌟 Example Use Cases
For Sales Teams
"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"For Marketing Teams
"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"For Customer Success
"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"For Data Operations
"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"🔐 Security & Privacy
Secure API Authentication: Industry-standard API key authentication
No Data Storage: Direct API passthrough with no local data retention
Open Source: Full transparency with Apache 2.0 license
Optional On-Premises: Deploy in your own infrastructure
npm Provenance: Published with Sigstore provenance — every release is cryptographically linked to the GitHub Actions build and source commit
Supply Chain Verification
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 credentialsFor 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 installed
📚 Documentation
Comprehensive documentation is available in the docs directory:
Universal Tools (Recommended)
⚠️ 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.
API Overview - High-level API concepts and patterns
Universal Tools Source - Current implementation reference
Tool Schemas - Parameter definitions and validation
Getting Started
Configuration
Warning Filter Configuration - Understanding cosmetic vs semantic mismatches, ESLint budgets, and suppression strategies
Field Verification Configuration - Field persistence verification and validation settings
Search Scoring Configuration - Environment variables for relevance scoring, caching, and operator validation
API Reference
📋 Implementation Status: These docs describe the Attio API endpoints. For MCP tool usage, refer to universal tools documentation above.
API Overview - General Attio API concepts
Companies API - Company record endpoints ✅ Fully Implemented via Universal Tools
People API - Person record endpoints ✅ Fully Implemented via Universal Tools
Lists API - List management endpoints ✅ Fully Implemented
Notes API - Notes endpoints ✅ Basic Implementation
Tasks API - Task endpoints ✅ Implemented via Universal Tools
Advanced Topics
Batch Operations - Bulk operations ✅ Implemented with chunking
Advanced Filtering - Complex queries ✅ Implemented
Error Handling - Error patterns ✅ Enhanced error handling
Extending MCP - Customization guide
Deployment
🛠 Development
Setup Development Environment
git clone https://github.com/kesslerio/attio-mcp-server.git
cd attio-mcp-server
npm install
npm run build
npm run test:offlineSmithery CLI Development
For local development and testing with Smithery Playground:
npm run dev # Opens Smithery Playground with local serverSee docs/deployment/smithery-cli-setup.md for detailed Smithery CLI development setup.
Testing
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.
Available Scripts
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🤝 Contributing
We welcome contributions! Please see our Contributing Guidelines for details on:
Adding new tools and features
Improving documentation
Reporting bugs and requesting features
Testing and quality assurance
📈 What's Next?
This initial release provides a solid foundation for CRM automation.
🔗 Links
NPM Package: https://www.npmjs.com/package/attio-mcp
GitHub Repository: https://github.com/kesslerio/attio-mcp-server
Issues & Support: https://github.com/kesslerio/attio-mcp-server/issues
Releases: https://github.com/kesslerio/attio-mcp-server/releases
Attio Documentation: https://developers.attio.com/
📄 License
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-mcpAvailable Tools
33 toolsaaa-health-checkARead-onlyIdempotentInspect
Returns server status without requiring any credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond annotations: it specifies that no credentials are required, which isn't covered by readOnlyHint or idempotentHint. Annotations already indicate it's safe (read-only, idempotent), so the bar is lower, but the credential-free aspect is a useful behavioral trait that enhances transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key information: it states what the tool does and a critical constraint (no credentials needed). Every word earns its place, with no redundancy or unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema) and rich annotations (readOnlyHint, idempotentHint), the description is nearly complete. It covers purpose, usage, and a key behavioral trait. A minor gap is the lack of detail on what 'server status' includes, but with annotations ensuring safety, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the baseline is 4. The description reinforces this by stating 'without requiring any credentials,' which aligns with the empty input schema, adding clarity that no inputs are needed for this operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb ('Returns') and resource ('server status'), making the purpose clear. It also distinguishes itself from siblings by specifying it doesn't require credentials, which is unique among the listed tools that mostly involve data manipulation or retrieval requiring authentication.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: for checking server status without credentials. It implies an alternative scenario where other tools might require credentials, helping differentiate it from siblings that likely need authentication for operations like create, delete, or search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add-record-to-listCInspect
Add a company or person to a CRM list (sales pipeline, lead list, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| initialValues | No | Initial values for the list entry (e.g., {"stage": "Prospect"}) | |
| listId | Yes | ID of the list to add the record to | |
| objectType | Yes | Type of record (e.g., "companies", "people") | |
| recordId | Yes | ID of the record to add to the list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool adds records to lists, implying a mutation operation, but doesn't describe permissions required, whether the operation is idempotent, error handling, or what happens if the record is already in the list. This leaves significant gaps for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Add a company or person to a CRM list') and includes helpful examples ('sales pipeline, lead list, etc.') without unnecessary details. Every word earns its place, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks behavioral details like side effects, error conditions, or return values, and doesn't provide usage context relative to siblings. While concise, it fails to address key aspects needed for safe and effective tool invocation in a complex CRM environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 4 parameters (listId, recordId, objectType, initialValues) with descriptions and an enum for objectType. The description adds no parameter-specific information beyond what's in the schema, such as format examples or constraints, so it meets the baseline for high schema coverage without compensating value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and resource ('a company or person to a CRM list'), with examples like 'sales pipeline, lead list' providing context. It distinguishes from siblings like 'remove-record-from-list' by specifying addition, but doesn't explicitly differentiate from 'update-list-entry' or 'create-record' beyond the 'add to list' focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description implies usage for adding records to lists, but doesn't mention prerequisites, when to choose this over 'create-record' (which might create a new record vs. adding an existing one), or when to use 'update-list-entry' instead. It lacks context on appropriate scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advanced-filter-list-entriesBInspect
Filter entries in a CRM list with advanced multiple conditions (complex sales pipeline queries)
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | Advanced filter configuration | |
| limit | No | Maximum number of entries to fetch (default: 20) | |
| listId | Yes | ID of the list to filter entries from | |
| offset | No | Number of entries to skip for pagination (default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral information. It mentions 'advanced multiple conditions' and 'complex sales pipeline queries' which gives some context about complexity, but doesn't disclose important traits like whether this is a read-only operation, potential performance implications, pagination behavior (though schema hints at it), error conditions, or authentication requirements. For a tool with complex nested parameters and no annotations, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose upfront. It uses parenthetical clarification effectively. However, it could be slightly more structured by separating the 'what' from the 'when' or providing a brief example of what 'advanced' means.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with complex nested parameters (4 parameters with deep nesting), no annotations, and no output schema, the description is insufficient. It doesn't explain the return format, error handling, performance characteristics, or provide examples of the 'advanced' filtering. The agent would struggle to use this effectively without trial and error despite the good schema documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'advanced multiple conditions' which aligns with the complex 'filters' parameter structure, but doesn't provide additional context about parameter relationships, usage examples, or semantic meaning beyond what's in the schema descriptions. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('filter entries') and resource ('in a CRM list'), and specifies the capability ('with advanced multiple conditions'). It distinguishes from simpler filtering tools like 'filter-list-entries' by emphasizing 'advanced' and 'complex sales pipeline queries'. However, it doesn't explicitly name the sibling 'filter-list-entries' for direct comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('complex sales pipeline queries') suggesting this tool is for more sophisticated filtering needs. However, it doesn't explicitly state when to use this versus simpler alternatives like 'filter-list-entries' or 'search' tools, nor does it mention prerequisites or exclusions. The guidance is present but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
advanced-searchBRead-onlyIdempotentInspect
Advanced search with complex filtering across all resource types
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Complex filter conditions with nested array structure. Required format: { "filters": [ { "attribute": {"slug": "field_name"}, "condition": "operator", "value": "search_value" } ] } Examples: - Single filter: {"filters": [{"attribute": {"slug": "name"}, "condition": "contains", "value": "Tech"}]} - Multiple filters: {"filters": [{"attribute": {"slug": "name"}, "condition": "contains", "value": "Tech"}, {"attribute": {"slug": "categories"}, "condition": "equals", "value": "Technology"}]} - OR logic: {"filters": [...], "matchAny": true} Supported conditions: contains, equals, starts_with, ends_with, greater_than, less_than, is_empty, is_not_empty | |
| limit | No | Maximum number of results to return | |
| offset | No | Number of results to skip for pagination | |
| query | No | Search query string | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| sort_by | No | Field to sort results by | |
| sort_order | No | Sort order | asc |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds some context about 'complex filtering across all resource types', which helps understand scope, but doesn't provide additional behavioral details like rate limits, authentication requirements, or performance characteristics. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation and gets straight to the point with zero wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects) and lack of output schema, the description provides minimal but adequate context. With annotations covering safety/idempotency and schema covering parameters, the description's main gap is distinguishing from sibling tools. For a search tool without output schema, more guidance on result format would be helpful but isn't critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema thoroughly documents all 7 parameters including examples and constraints. The description adds no parameter-specific information beyond what's already in the schema. The baseline score of 3 reflects adequate parameter documentation coming entirely from the schema rather than the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'advanced search with complex filtering across all resource types', which specifies the verb (search), scope (advanced/complex), and resource coverage (all resource types). However, it doesn't explicitly differentiate from sibling tools like 'search', 'search-records', or 'batch-search', which reduces the score from a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple search-related sibling tools (search, search-records, batch-search, search-by-content, etc.), the agent receives no indication of when this 'advanced search' is preferable or what distinguishes it from simpler search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch-operationsCDestructiveInspect
Perform bulk operations (create, update, delete, get, search)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| offset | No | Number of results to skip for pagination | |
| operation_type | No | Batch operation type (legacy format) | |
| operations | No | Array of operations to perform | |
| record_ids | No | Record IDs for delete/get (legacy format) | |
| records | No | Record data for create/update (legacy format) | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=true, which the description doesn't contradict. The description mentions 'delete' as an operation type, aligning with the destructive hint. However, it adds minimal behavioral context beyond annotations—no information about rate limits, authentication needs, error handling, or what 'bulk' entails (e.g., atomicity, batch size limits). With annotations covering safety, the description adds some value but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that lists the operation types. It's front-loaded with the core purpose. However, it could be more structured by separating operation types or adding brief context, but it avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, destructive operations, no output schema), the description is inadequate. It doesn't explain return values, error handling, or how batch results are formatted. With annotations providing basic safety info but no output schema, the description should offer more context to help the agent understand behavioral outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no specific parameter semantics beyond implying operations like create/update/delete/get/search. It doesn't explain relationships between parameters (e.g., how 'operations' interacts with 'operation_type') or clarify legacy formats. Baseline 3 is appropriate as the schema handles most documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool performs bulk operations and lists the operation types (create, update, delete, get, search), which gives a general purpose. However, it's vague about what resources are operated on and doesn't distinguish this from sibling tools like batch-search, create-record, or update-record. The description lacks specificity about the scope or target of these operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many sibling tools for individual operations (create-record, update-record, delete-record, search, etc.), there's no indication of when batch processing is preferred over single operations, what prerequisites exist, or any limitations. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch-searchBRead-onlyIdempotentInspect
Perform batch search operations with multiple queries in parallel
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results per query (default: 20) | |
| offset | No | Number of results to skip per query (default: 0) | |
| queries | Yes | Array of search query strings | |
| resource_type | Yes | Resource type to search (companies, people, records, tasks, deals) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds the 'parallel' execution context, which is useful behavioral information beyond annotations, but doesn't cover rate limits, performance characteristics, or error handling for failed queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Perform batch search operations') and adds key context ('with multiple queries in parallel'). There's zero wasted verbiage or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with good annotations (read-only, idempotent) and full schema coverage, the description is minimally adequate. However, without an output schema, it doesn't explain what results look like (e.g., array of result sets, error handling for partial failures), leaving gaps in understanding the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters well-documented in the schema itself. The description doesn't add any meaningful parameter semantics beyond what's already in the schema (e.g., it doesn't explain query format, result structure, or how parallel execution affects parameter interpretation). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Perform batch search operations') and resource ('multiple queries'), specifying parallel execution. It distinguishes from simple 'search' tools by emphasizing batch processing, though it doesn't explicitly differentiate from all sibling search tools like 'advanced-search' or 'search-by-content'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search', 'advanced-search', or other sibling search tools. It mentions parallel execution but doesn't specify scenarios where batch processing is preferred over individual searches or what trade-offs exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-noteBInspect
Create a note for any record type (companies, people, deals)
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Content of the note | |
| record_id | Yes | ID of the record to attach the note to | |
| resource_type | Yes | Target resource type | |
| title | Yes | Title of the note |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-destructive write operation (readOnlyHint: false, destructiveHint: false), which the description aligns with by using 'Create'. The description adds minimal behavioral context beyond annotations—it specifies the record types but doesn't cover error conditions, permissions, or what happens on success (e.g., whether a note ID is returned). With annotations covering safety, a baseline 3 is appropriate for the limited added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It front-loads the core purpose ('Create a note') and immediately specifies scope, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 required parameters, no output schema), the description is minimally adequate. It covers the 'what' but lacks context on usage, errors, or output. With annotations providing safety info and schema covering parameters, the description is incomplete but not critically so for basic understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters clearly documented in the schema. The description adds no parameter-specific information beyond implying 'record type' relates to 'resource_type', but doesn't explain the enum values or parameter interactions. This meets the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a note') and specifies the target resources ('for any record type (companies, people, deals)'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from potential sibling note-creation tools (though none are listed), and the parenthetical list omits some resource_types from the enum (e.g., 'lists', 'tasks'), creating minor inconsistency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing valid record IDs), exclusions, or comparisons to sibling tools like 'create-record' or 'list-notes'. The agent must infer usage solely from the tool name and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-recordBInspect
Create a new record of any supported type
| Name | Required | Description | Default |
|---|---|---|---|
| record_data | Yes | Data to create | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| return_details | No | Return full details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-destructive write operation (readOnlyHint: false, destructiveHint: false). The description adds minimal behavioral context beyond this - it doesn't mention authentication requirements, rate limits, or what happens on creation failure. However, it doesn't contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that communicates the core purpose efficiently. There's no wasted language or unnecessary elaboration, making it easy to parse while still being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema and multiple sibling alternatives, the description is insufficient. It doesn't explain what 'supported types' means, what the creation response looks like, or how this differs from other creation tools in the server. The annotations cover basic safety but the description lacks crucial operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema already documents all three parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain the relationship between 'resource_type' and 'record_data' or provide examples of valid record structures.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('create') and resource ('new record of any supported type'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'create-note' or 'add-record-to-list', which would require more specific scope definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'create-note', 'add-record-to-list', and 'update-record' available, there's no indication of when this general creation tool is preferred over more specific ones or what prerequisites might be needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-recordBDestructiveInspect
Delete a record of any supported type
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes | Record ID to delete | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive write operation. The description adds minimal context beyond this—it doesn't specify whether deletions are permanent, reversible, have confirmation steps, or affect related data. With annotations covering the safety profile, this meets baseline expectations but doesn't provide rich behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place without redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description is minimally adequate but lacks depth. Annotations cover safety (destructive), and schema covers parameters fully, but the description doesn't address critical context like what 'delete' entails (permanent? soft delete?), error handling, or return values. It meets basic requirements but leaves gaps for informed usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema (record_id and resource_type with enum values). The description adds no additional parameter semantics beyond what the schema provides, such as explaining the relationship between record_id and resource_type or providing examples. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('record of any supported type'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'remove-record-from-list' or 'batch-operations' that might also involve deletion operations, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'remove-record-from-list' (which removes from lists but doesn't delete) or 'batch-operations' (which might handle bulk deletions). It lacks context about prerequisites, permissions needed, or when deletion is appropriate versus other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover-attributesBRead-onlyIdempotentInspect
Discover available attributes for any resource type
| Name | Required | Description | Default |
|---|---|---|---|
| categories | No | Attribute categories | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds the scope of 'any resource type' and implies a cataloging function, which provides useful context beyond annotations. However, it doesn't describe behavioral details like response format, pagination, or error conditions that would be helpful for a discovery tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the core function. Every word earns its place with no redundancy or fluff. It's appropriately sized for a simple discovery tool and front-loads the essential information without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent discovery tool with good annotations and full schema coverage, the description is minimally adequate. However, without an output schema, the description doesn't explain what the discovery results look like (e.g., attribute names, types, metadata). Given the tool's purpose of revealing available attributes, more information about the return format would be beneficial for contextual completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters. The description mentions 'resource type' which aligns with the schema's enum, but adds no additional semantic context about parameter usage, relationships, or constraints beyond what's already in the structured schema. With complete schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as discovering available attributes for resource types, using specific verbs ('discover') and resources ('attributes', 'resource type'). It distinguishes from siblings like 'get-attributes' by emphasizing discovery of what's available rather than retrieving specific attribute data. However, it doesn't explicitly contrast with 'get-attributes' in the description text itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get-attributes' or explain scenarios where discovering available attributes is preferable to directly retrieving attribute data. There's no context about prerequisites, timing, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchARead-onlyIdempotentInspect
Retrieve the full record payload for a search result ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifier emitted by the search tool (<resource>:<id>). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior, so the description does not need to repeat these. It adds context by specifying that it retrieves 'full record payload', which clarifies the scope of data returned beyond what annotations provide. However, it lacks details on error handling, response format, or any limitations like rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Retrieve the full record payload') and includes essential context ('for a search result ID'). There is no wasted verbiage, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, 100% schema coverage, read-only/idempotent annotations) and lack of output schema, the description is adequate but minimal. It covers the basic purpose and input context but does not address output details, error cases, or integration with sibling tools, leaving some gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'id' fully documented in the schema as 'Identifier emitted by the search tool (<resource>:<id>)'. The description adds minimal value by restating 'search result ID' but does not provide additional semantics beyond what the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Retrieve'), the target ('full record payload'), and the required input ('for a search result ID'). It distinguishes itself from siblings like 'search' or 'get-record-details' by focusing on fetching complete data for a pre-identified search result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by referencing 'search result ID' from the 'search tool', suggesting it should be used after search operations. However, it does not explicitly state when to use this versus alternatives like 'get-record-details' or 'get-detailed-info', nor does it provide exclusions or prerequisites beyond the ID requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter-list-entriesCInspect
Filter entries in a CRM list by a specific attribute (e.g., stage, status)
| Name | Required | Description | Default |
|---|---|---|---|
| attributeSlug | Yes | Slug of the attribute to filter by (e.g., 'stage', 'status') | |
| condition | Yes | Filter condition (e.g., 'equals', 'contains', 'greater_than') | |
| limit | No | Maximum number of entries to fetch (default: 20) | |
| listId | Yes | ID of the list to filter entries from | |
| offset | No | Number of entries to skip for pagination (default: 0) | |
| value | Yes | Value to filter by (type depends on the attribute) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool filters entries but doesn't mention whether this is a read-only operation, if it affects data, what permissions are required, or how results are returned (e.g., pagination details beyond schema). The description is minimal and lacks crucial behavioral context for a filtering tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose with a relevant example. It's front-loaded with the core functionality and wastes no words. This is appropriately concise for a straightforward filtering tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtering tool with 6 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the tool's behavior, return format, error conditions, or how it differs from similar tools like 'advanced-filter-list-entries'. The agent lacks context to use this tool effectively beyond basic parameter filling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds no parameter-specific information beyond implying filtering by attribute. It doesn't explain parameter interactions, value types, or provide examples beyond the generic 'e.g., stage, status'. With high schema coverage, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('filter entries') and resource ('in a CRM list'), with a specific attribute example ('e.g., stage, status'). It distinguishes from siblings like 'get-list-entries' (no filtering) and 'advanced-filter-list-entries' (more complex filtering), but doesn't explicitly name alternatives. This is clear but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'advanced-filter-list-entries' or 'search'. It mentions filtering by a specific attribute but doesn't specify prerequisites, limitations, or when other tools might be more appropriate. This leaves the agent with minimal context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter-list-entries-by-parentBInspect
Filter CRM list entries based on parent record properties (find companies by industry, people by role, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| condition | Yes | Filter condition (e.g., "equals", "contains", "starts_with") | |
| limit | No | Maximum number of entries to fetch (default: 20) | |
| listId | Yes | ID of the list to filter entries from | |
| offset | No | Number of entries to skip for pagination (default: 0) | |
| parentAttributeSlug | Yes | Attribute of the parent record to filter by (e.g., "name", "email_addresses", "categories") | |
| parentObjectType | Yes | Type of the parent record (e.g., "companies", "people") | |
| value | Yes | Value to filter by (type depends on the attribute) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it states the tool filters entries, it doesn't describe whether this is a read-only operation, what permissions are required, how results are returned (e.g., pagination behavior beyond schema hints), or potential side effects. The description adds minimal behavioral context beyond the basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that is front-loaded with the core purpose and includes helpful examples in parentheses. There is no wasted language, and every part of the sentence contributes to understanding the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, filtering logic) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavioral traits, usage context, and output format. For a filtering tool with no structured output information, more guidance on result handling would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters thoroughly. The description adds minimal value beyond the schema—it mentions filtering 'based on parent record properties' and gives examples ('companies by industry, people by role'), but doesn't provide additional syntax, format details, or constraints not already in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Filter CRM list entries based on parent record properties' with specific examples like 'find companies by industry, people by role'. It uses a specific verb ('filter') and resource ('CRM list entries'), but doesn't explicitly distinguish it from sibling tools like 'filter-list-entries' or 'filter-list-entries-by-parent-id'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions examples ('find companies by industry, people by role') which imply context, but doesn't specify when to choose this over similar tools like 'filter-list-entries' or 'filter-list-entries-by-parent-id', nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter-list-entries-by-parent-idAInspect
Filter CRM list entries by parent record ID (find all lists containing a specific company or person)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to fetch (default: 20) | |
| listId | Yes | ID of the list to filter entries from | |
| offset | No | Number of entries to skip for pagination (default: 0) | |
| recordId | Yes | ID of the parent record to filter by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions filtering behavior but doesn't disclose pagination details (implied by parameters), rate limits, authentication requirements, error conditions, or what happens with invalid IDs. The description adds minimal behavioral context beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose and includes helpful examples. Every word earns its place with zero redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only filtering tool with 4 parameters (2 required), 100% schema coverage, and no output schema, the description is adequate but incomplete. It explains the what but lacks behavioral details (pagination behavior, error handling) that would help an agent use it correctly, especially given no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds marginal value by clarifying that 'recordId' refers to a 'parent record' and providing examples ('company or person'), but doesn't explain parameter interactions or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Filter CRM list entries') and resource ('by parent record ID'), with explicit examples ('find all lists containing a specific company or person'). It distinguishes from siblings like 'filter-list-entries' (general filtering) and 'get-record-list-memberships' (different perspective).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context ('find all lists containing a specific company or person') but doesn't explicitly state when to use this tool versus alternatives like 'get-record-list-memberships' or 'filter-list-entries'. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-attributesBRead-onlyIdempotentInspect
Get attributes for any resource type (companies, people, lists, records, tasks, deals, notes)
| Name | Required | Description | Default |
|---|---|---|---|
| categories | No | Attribute categories | |
| fields | No | Specific attribute field names | |
| record_id | No | Record ID to get attributes for (optional) | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds value by specifying the scope ('for any resource type') but doesn't disclose additional behavioral traits like rate limits, authentication needs, or what happens with invalid resource types. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, zero waste. It efficiently conveys the tool's purpose and scope without unnecessary words, making it easy for an AI agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations cover safety (read-only, idempotent) and schema fully describes parameters, the description is minimally adequate. However, with no output schema and multiple sibling tools, it lacks context on return format, error handling, or differentiation from similar tools like 'discover-attributes', leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 4 parameters. The description mentions 'resource type' and implies attribute retrieval but doesn't add meaning beyond what the schema provides (e.g., explaining relationships between parameters or usage examples). Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'attributes', specifying it works for multiple resource types (companies, people, lists, records, tasks, deals, notes). It distinguishes from some siblings like 'get-record-details' or 'get-list-details' by focusing on attributes rather than general details, but doesn't explicitly differentiate from 'discover-attributes' which might be a similar tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description doesn't mention when to choose this over 'get-record-details', 'get-list-details', or 'discover-attributes', nor does it provide context about prerequisites or appropriate scenarios for attribute retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-detailed-infoBRead-onlyIdempotentInspect
Get specific types of detailed information (contact, business, social)
| Name | Required | Description | Default |
|---|---|---|---|
| record_id | Yes | Unique identifier of the record | |
| resource_type | Yes | Type of resource |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, indicating safe, repeatable read operations. The description adds no behavioral context beyond this, such as rate limits, authentication needs, or data format specifics. It doesn't contradict annotations, but offers minimal additional value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately front-loaded, though it could be slightly more structured to highlight key distinctions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety and idempotency, and the schema fully documents parameters, the description is minimally adequate. However, without an output schema, it doesn't explain return values or error handling, leaving gaps in completeness for a tool that fetches detailed data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, fully documenting both parameters (record_id and resource_type with enum values). The description mentions 'specific types of detailed information' but doesn't add meaning beyond the schema's enum list or clarify how parameters interact, so it meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and specifies the types of detailed information (contact, business, social), making the purpose understandable. However, it doesn't explicitly distinguish this tool from similar siblings like 'get-record-details' or 'fetch', which limits its differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With many sibling tools like 'get-record-details' and 'fetch' that might overlap in functionality, the absence of explicit usage context or exclusions leaves the agent without clear direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-list-detailsCInspect
Get details for a specific CRM list (pipeline stages, field configuration, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| listId | Yes | ID of the list to get details for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states this is a read operation ('Get'), but doesn't disclose behavioral traits like authentication requirements, rate limits, error conditions, or what happens if the list ID is invalid. For a tool with no annotation coverage, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. It avoids unnecessary words and directly states what the tool does. The parenthetical examples add useful context without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter with full schema coverage but no annotations or output schema, the description is minimally adequate. It clarifies the tool's focus on list details (not entries or records), but doesn't address behavioral aspects or output format. For a read-only tool with simple inputs, this is acceptable but leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'listId' fully documented in the schema. The description adds no additional parameter semantics beyond implying the tool fetches details for a list, which is already clear from the schema. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'details for a specific CRM list', with examples of what details might include (pipeline stages, field configuration). It distinguishes from siblings like 'get-lists' (which lists multiple lists) and 'get-record-details' (which focuses on records rather than lists). However, it doesn't explicitly differentiate from 'get-detailed-info' which might overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid list ID), exclusions, or compare to similar tools like 'get-detailed-info' or 'get-list-entries'. The agent must infer usage from the name and context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-list-entriesBInspect
Get entries for a specific CRM list (companies, people, etc. in sales pipelines)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of entries to fetch (default: 20) | |
| listId | Yes | ID of the list to get entries for | |
| offset | No | Number of entries to skip for pagination (default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states what the tool does without disclosing behavioral traits such as pagination behavior (implied by offset/limit but not explained), rate limits, authentication needs, or error handling. It mentions 'companies, people, etc.' but doesn't clarify if this is exhaustive or example-based.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose with zero waste. It uses parentheses to add clarifying examples without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with 3 parameters and 100% schema coverage but no annotations or output schema, the description is minimally adequate. It covers the basic purpose but lacks details on return values, error cases, or behavioral context that would help an agent use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters (listId, limit, offset). The description adds no additional parameter semantics beyond what's in the schema, such as format details for listId or constraints on limit/offset values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'entries for a specific CRM list', with examples like 'companies, people, etc. in sales pipelines' that clarify the type of data. It distinguishes from general search tools but doesn't explicitly differentiate from sibling tools like 'filter-list-entries' or 'advanced-filter-list-entries'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'filter-list-entries', 'advanced-filter-list-entries', or 'search' tools is provided. The description implies usage for retrieving list entries but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-listsBInspect
Get all CRM lists from Attio (sales pipelines, lead stages, customer segments, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'Get all CRM lists' but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires authentication, rate limits, pagination, or what the return format might be. For a tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Get all CRM lists') and includes helpful examples without unnecessary elaboration. Every word earns its place, making it appropriately sized and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (0 parameters, no output schema), the description is adequate but incomplete. It specifies what is retrieved but lacks details on behavioral aspects like safety, performance, or output format. With no annotations and no output schema, the description should do more to compensate, but it meets minimum viability for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the lack of inputs. The description adds value by specifying 'all CRM lists from Attio' and providing examples, which clarifies the resource scope beyond what the empty schema indicates. Baseline for 0 parameters is 4, and the description compensates appropriately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'all CRM lists from Attio', with examples like 'sales pipelines, lead stages, customer segments' that help clarify scope. However, it doesn't explicitly differentiate from sibling tools like 'get-list-details' or 'get-list-entries', which might retrieve specific list information rather than all lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'get-list-details' or 'filter-list-entries'. It lacks context on prerequisites, exclusions, or comparisons with sibling tools, leaving the agent to infer usage based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-record-detailsBRead-onlyIdempotentInspect
Get detailed information for any record type
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Fields to include | |
| record_id | Yes | Record ID to retrieve | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and idempotentHint=true, indicating a safe, repeatable read operation. The description adds value by specifying 'detailed information for any record type', which hints at broader scope beyond basic retrieval, but doesn't disclose rate limits, authentication needs, or error behaviors. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose, making it easy to parse quickly. No unnecessary elaboration or redundancy is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given annotations cover safety and idempotency, and schema covers parameters fully, the description is minimally adequate. However, with no output schema and siblings offering similar functions, it lacks details on return format, error handling, or differentiation, leaving gaps in context for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning about parameters beyond implying 'any record type' aligns with the resource_type enum. Baseline 3 is appropriate as the schema carries the burden, but the description doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get detailed information for any record type' clearly states the verb ('Get') and resource ('detailed information for any record type'), but it's vague about what 'detailed information' entails and doesn't distinguish it from siblings like 'get-detailed-info' or 'get-list-details'. It provides a basic purpose but lacks specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives. With siblings like 'get-detailed-info', 'search-records', and 'fetch' that might overlap in functionality, there's no indication of context, prerequisites, or exclusions. It leaves the agent to guess based on the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-record-list-membershipsAInspect
Find all CRM lists that a specific record (company, person, etc.) belongs to
| Name | Required | Description | Default |
|---|---|---|---|
| batchSize | No | Number of lists to process in parallel (1-20, default: 5) | |
| includeEntryValues | No | Whether to include entry values in the response (e.g., stage, status) | |
| objectType | No | Type of record (e.g., "companies", "people") | |
| recordId | Yes | ID of the record to find in lists |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'finds' lists, implying a read-only operation, but does not disclose other traits such as rate limits, authentication needs, pagination behavior, or what happens if the record doesn't exist. This is a significant gap for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Find all CRM lists that a specific record belongs to') with no wasted words. Every part of the sentence earns its place by specifying the action, scope, and target.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description is adequate for a read operation but incomplete. It covers the basic purpose and parameters (via schema), but lacks details on behavioral traits (e.g., error handling, performance) and output format, which are important for a tool with 4 parameters and no structured output documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description does not add meaning beyond the schema (e.g., it doesn't explain how 'objectType' and 'recordId' interact or what 'includeEntryValues' entails in practice). Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Find') and resource ('all CRM lists that a specific record belongs to'), and it distinguishes from siblings like 'get-list-details' (which lists list properties) or 'get-list-entries' (which lists entries within a list) by focusing on membership relationships for a given record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to know which lists contain a particular record, but it does not explicitly state when to use this tool versus alternatives (e.g., 'filter-list-entries' for filtering entries within a list, or 'search' for broader searches). No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-workspace-memberCInspect
Get details of a specific workspace member
| Name | Required | Description | Default |
|---|---|---|---|
| memberId | Yes | The workspace member ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states a read operation ('Get details'), implying it's non-destructive, but fails to mention permissions, rate limits, error handling, or response format, which are critical for a tool with no structured safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and appropriately sized for its simple function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It does not explain what 'details' are returned, error conditions, or behavioral traits, leaving significant gaps for a tool that retrieves specific member information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'memberId' documented as 'The workspace member ID'. The description adds no additional meaning beyond this, so it meets the baseline for adequate but unenhanced parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get details') and resource ('workspace member'), making the purpose understandable. However, it does not differentiate from sibling tools like 'list-workspace-members' or 'search-workspace-members', which reduces specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'list-workspace-members' or 'search-workspace-members'. It lacks context about prerequisites or exclusions, leaving usage ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-notesBRead-onlyIdempotentInspect
Get notes for any record type (companies, people, deals)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| offset | No | Number of results to skip for pagination | |
| parent_record_id | No | Alias for record_id (backward compatibility) | |
| record_id | No | Record ID to list notes for | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds context about supporting 'any record type' with examples, but doesn't disclose behavioral traits like pagination behavior (implied by limit/offset), rate limits, authentication needs, or what happens when no notes exist. With annotations covering safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place by specifying the action ('Get'), resource ('notes'), and scope ('any record type') with clarifying examples. There's zero waste or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with good annotations (readOnlyHint, idempotentHint) and full schema coverage, the description is minimally adequate. However, without an output schema, it doesn't explain what the returned notes look like (structure, fields, ordering). The description covers the basic purpose but leaves return format unspecified, which is a gap given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description mentions 'any record type' which aligns with the resource_type enum, but adds no additional semantic context beyond what the schema provides. With complete schema coverage, the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Get notes for any record type' with specific examples (companies, people, deals). It uses a specific verb ('Get') and resource ('notes'), but doesn't explicitly distinguish this from sibling tools like 'create-note' or 'search-by-content' which might also involve notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'search-by-content' (which might search note content) or 'create-note' (which creates notes), nor does it specify prerequisites or appropriate contexts for using this listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-workspace-membersBInspect
List all workspace members for task assignment
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| pageSize | No | Number of results per page | |
| search | No | Search by name or email |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a list operation but doesn't mention pagination behavior (implied by parameters), rate limits, authentication needs, or what the output looks like. The phrase 'for task assignment' adds some context but lacks operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose and includes a brief contextual note, making it appropriately sized and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no annotations and no output schema, the description is minimally adequate. It states the purpose but lacks details on output format, error handling, or behavioral constraints. The context 'for task assignment' adds some value, but more completeness would require explaining the return structure or usage nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters (page, pageSize, search). The description adds no additional parameter information beyond what's in the schema, meeting the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all workspace members'), providing a specific purpose. It adds context about 'for task assignment' which gives additional intent, though it doesn't explicitly differentiate from the sibling tool 'search-workspace-members' which might serve similar purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'search-workspace-members' or 'get-workspace-member'. It mentions 'for task assignment' which implies a use case but doesn't specify prerequisites, exclusions, or comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-record-from-listCInspect
Remove a company or person from a CRM list (sales pipeline, lead list, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ID of the list entry to remove | |
| listId | Yes | ID of the list to remove the record from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool performs a removal operation but doesn't clarify if this is reversible, requires specific permissions, affects related data, or has side effects. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and includes helpful examples without unnecessary elaboration. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks details on what happens after removal (e.g., confirmation message, error handling), whether the action is logged or reversible, and how it differs from similar tools. Given the complexity of list management in a CRM context, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters ('entryId' and 'listId') clearly documented in the schema. The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples or relationship context, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and target ('a company or person from a CRM list'), with examples of list types ('sales pipeline, lead list, etc.') that provide helpful context. It doesn't explicitly differentiate from sibling tools like 'delete-record' or 'update-list-entry', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'delete-record' (which might permanently delete) or 'update-list-entry' (which might modify rather than remove). The description mentions CRM lists but doesn't specify prerequisites, exclusions, or typical scenarios for removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBRead-onlyIdempotentInspect
Search Attio data by query for OpenAI MCP clients.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 10). | |
| query | Yes | Search query string (required). | |
| type | No | Optional resource filter (defaults to all). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only and idempotent operations, which the description doesn't contradict. The description adds minimal behavioral context beyond annotations ('by query'), but doesn't cover important aspects like what data is searched, result format, or limitations. With annotations providing safety hints, the bar is lower, but the description could offer more operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (one sentence) and front-loaded with the core function. However, the phrase 'for OpenAI MCP clients' is unnecessary clutter that doesn't help tool selection. Otherwise, it's efficiently structured with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of search operations, multiple sibling tools, and no output schema, the description is insufficient. It doesn't explain what 'Attio data' includes, how results are returned, or how this differs from other search tools. For a search tool in a crowded namespace, more context is needed to guide proper usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema itself. The description adds no parameter-specific information beyond implying a 'query' parameter exists. This meets the baseline of 3 when schema coverage is high, but doesn't enhance understanding of parameter usage or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool searches Attio data by query, which provides a basic purpose. However, it's vague about what 'Attio data' encompasses and doesn't distinguish this tool from many sibling search tools (e.g., advanced-search, search-by-content, search-records). The phrase 'for OpenAI MCP clients' adds no functional clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With multiple sibling search tools (advanced-search, search-by-content, search-records, etc.), the description offers no context about differences in scope, performance, or use cases. It simply states what the tool does without comparative information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-by-contentCRead-onlyIdempotentInspect
Search within notes, activity, and interaction content
| Name | Required | Description | Default |
|---|---|---|---|
| content_type | Yes | Type of content to search | |
| limit | No | Maximum number of results to return | |
| offset | No | Number of results to skip for pagination | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| search_query | Yes | Query to search within content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds minimal behavioral context beyond this - it mentions the content types being searched but doesn't describe result format, pagination behavior, or any limitations. With annotations covering the safety profile, a 3 is appropriate as the description adds some value but not rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core function without unnecessary words. It's appropriately sized for a search tool, though it could be more front-loaded with distinguishing characteristics. There's no wasted verbiage, but it lacks the specificity that would make it truly excellent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, 100% schema coverage, and annotations declaring it as read-only/idempotent, the description is minimally adequate. However, without an output schema and with multiple similar sibling tools, the description should do more to clarify when this tool is appropriate versus alternatives. It meets minimum requirements but leaves significant contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description mentions 'notes, activity, and interaction content' which partially maps to the content_type enum values, but doesn't add meaningful semantics beyond what the schema provides. The description doesn't explain parameter relationships or search behavior. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search within notes, activity, and interaction content' states the general action (search) and scope (content types), but it's vague about what resources are being searched. It doesn't distinguish from siblings like 'search', 'search-records', or 'advanced-search' which likely have overlapping functionality. The description provides basic purpose but lacks specificity about the target resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple search-related siblings ('search', 'search-records', 'advanced-search', 'search-by-relationship', 'search-by-timeframe'), there's no indication of what makes this tool unique or when it's the appropriate choice. The description offers only a basic functional statement without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-by-relationshipBRead-onlyIdempotentInspect
Search records by their relationships to other entities
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| listId | No | (Optional) List ID (must be a valid UUID if provided) | |
| offset | No | Number of results to skip for pagination | |
| relationship_type | Yes | Relationship type | |
| source_id | Yes | Source record ID | |
| target_resource_type | No | Target resource type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds the core behavioral trait of relationship-based searching, which is valuable context beyond annotations. However, it doesn't describe pagination behavior, rate limits, or what happens when parameters are invalid, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states the core purpose without unnecessary words. It's front-loaded with the essential information and earns its place by clearly communicating the tool's unique approach to searching.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, relationship-based logic) and the absence of an output schema, the description is minimally adequate. It identifies the core concept but doesn't explain what the search returns, how results are structured, or provide examples of relationship queries. The 100% schema coverage helps, but for a relationship search tool, more contextual guidance would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 6 parameters well-documented in the schema itself. The description mentions 'relationships' which aligns with the 'relationship_type' parameter, but adds no additional semantic context beyond what the schema provides. With complete schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate for any gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search records by their relationships to other entities'. It specifies the verb ('search') and resource ('records') with the specific mechanism ('by their relationships'). However, it doesn't explicitly differentiate from sibling tools like 'search', 'search-by-content', or 'search-by-timeframe', which all perform different types of searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling search tools like 'search', 'search-by-content', or 'search-by-timeframe', nor does it explain what makes relationship-based searching unique. The agent must infer usage from the description alone without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-by-timeframeBRead-onlyIdempotentInspect
Search records by temporal criteria (creation, modification, interaction dates)
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (ISO 8601 format) | |
| limit | No | Maximum number of results to return | |
| offset | No | Number of results to skip for pagination | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| start_date | No | Start date (ISO 8601 format) | |
| timeframe_type | No | Timeframe filter type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe, repeatable read operation. The description adds context about the temporal nature of the search but doesn't disclose additional behavioral traits like pagination behavior (implied by offset/limit), rate limits, authentication requirements, or what happens with empty results. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the core functionality. It's appropriately sized for a search tool with good schema documentation, with zero wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, temporal filtering logic), 100% schema coverage, and read-only/idempotent annotations, the description is minimally adequate. However, without an output schema and with multiple similar search tools in the sibling set, it should provide more contextual differentiation and guidance about result format or when to prefer this over other search methods.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 6 parameters with descriptions, formats, enums, and constraints. The description adds minimal value beyond what's in the schema - it mentions 'temporal criteria' which aligns with timeframe_type but doesn't provide additional semantic context about parameter interactions or usage patterns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search records by temporal criteria' with specific examples of criteria types (creation, modification, interaction dates). It uses a specific verb ('Search') and resource ('records'), but doesn't explicitly distinguish it from sibling tools like 'search', 'search-by-content', or 'search-records' beyond the temporal focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple search-related sibling tools (search, search-by-content, search-by-relationship, search-records, advanced-search), there's no indication of when temporal filtering is preferred over other search methods or what distinguishes this from general search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-recordsBRead-onlyIdempotentInspect
Universal search across all resource types (companies, people, records, tasks)
| Name | Required | Description | Default |
|---|---|---|---|
| created_after | No | Filter records created after this date (ISO 8601) | |
| created_before | No | Filter records created before this date (ISO 8601) | |
| date_field | No | Which date field to filter on | created_at |
| date_from | No | Start date for filtering (ISO 8601 format) | |
| date_to | No | End date for filtering (ISO 8601 format) | |
| fields | No | Fields to search (content) | |
| filters | No | Advanced filter conditions | |
| limit | No | Maximum number of results to return | |
| match_type | No | String matching | |
| offset | No | Number of results to skip for pagination | |
| query | No | Search query string | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| search_type | No | Type of search | |
| sort | No | Sort order | |
| timeframe | No | Relative timeframe filter | |
| updated_after | No | Filter records updated after this date (ISO 8601) | |
| updated_before | No | Filter records updated before this date (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, indicating this is a safe, repeatable read operation. The description adds no behavioral context beyond what annotations provide—it doesn't mention pagination behavior, rate limits, authentication requirements, or what happens with empty results. However, it doesn't contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the core functionality without any wasted words. It's appropriately sized and front-loaded with the essential information about what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex search tool with 17 parameters, 100% schema coverage, and read-only/idempotent annotations, the description is minimally adequate. It states the purpose but lacks guidance on usage versus siblings, behavioral details, or output format (no output schema exists). The annotations provide safety context, but the description doesn't add enough value beyond the structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 17 parameters well-documented in the schema itself. The description adds no parameter-specific information beyond the general scope ('across all resource types'), which is already covered by the 'resource_type' parameter's enum. The baseline score of 3 is appropriate when the schema does all the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Universal search across all resource types (companies, people, records, tasks)'. It specifies the verb ('search') and scope ('universal across all resource types'), but doesn't explicitly distinguish it from sibling tools like 'search', 'search-by-content', 'search-by-timeframe', or 'advanced-search', which appear to offer similar functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple sibling search tools (e.g., 'search', 'search-by-content', 'search-by-timeframe', 'advanced-search'), the description fails to explain what makes this 'universal search' different or when it should be preferred over other search options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-workspace-membersCInspect
Search workspace members by name, email, or role
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query for name, email, or role |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions search functionality but does not disclose behavioral traits such as permissions needed, rate limits, pagination, or response format. This is inadequate for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It does not explain return values, error conditions, or behavioral constraints, which are crucial for a search tool with no structured data to compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the 'query' parameter. The description adds minimal value by specifying searchable attributes (name, email, role), but does not provide additional syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Search') and resource ('workspace members'), specifying the searchable attributes (name, email, or role). However, it does not differentiate from sibling tools like 'list-workspace-members' or 'get-workspace-member', which reduces clarity about when to use this specific search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With siblings like 'list-workspace-members' and 'get-workspace-member', the description lacks context on use cases, prerequisites, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-list-entryCInspect
Update a list entry (e.g., change stage from 'Interested' to 'Demo Scheduling')
| Name | Required | Description | Default |
|---|---|---|---|
| attributes | Yes | Attributes to update on the list entry | |
| entryId | Yes | ID of the list entry to update | |
| listId | Yes | ID of the list containing the entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an update operation (implying mutation) but doesn't disclose permission requirements, whether changes are reversible, what happens to unspecified attributes, error conditions, or response format. The example adds some context about stage values but doesn't cover behavioral traits adequately for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately conveys the core purpose with a helpful parenthetical example. Every word earns its place with zero redundancy or unnecessary elaboration, making it easy to parse while providing concrete context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't cover behavioral aspects like permissions, side effects, or response format, nor does it explain how this tool relates to sibling operations. The high schema coverage helps with parameters, but overall completeness is poor given the tool's complexity and lack of structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing good documentation for all three parameters. The description adds minimal value beyond the schema: it mentions stage changes as an example, which aligns with the 'stage' property in the schema but doesn't explain parameter interactions or provide additional semantic context. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('a list entry') with a specific example of changing stage values. It distinguishes the tool from siblings like 'update-record' by specifying it operates on list entries rather than general records. However, it doesn't explicitly contrast with all sibling tools that might modify list data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when-not-to-use scenarios, or compare with sibling tools like 'update-record', 'add-record-to-list', or 'remove-record-from-list' that might handle related operations. The example is helpful but doesn't constitute usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-recordBInspect
Update an existing record of any supported type
| Name | Required | Description | Default |
|---|---|---|---|
| record_data | Yes | Updated data | |
| record_id | Yes | Record ID to update | |
| resource_type | Yes | Type of resource to operate on (companies, people, lists, records, tasks) | |
| return_details | No | Return full details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-read-only, non-destructive operation, which the description's 'Update' action aligns with (no contradiction). The description adds minimal behavioral context beyond annotations—it mentions 'any supported type' but doesn't detail what happens on partial updates, error conditions, or side effects. With annotations covering safety, it meets baseline expectations without enriching understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose with zero wasted words. It's appropriately sized for a tool with good schema coverage and annotations, making it easy to parse quickly without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 100% schema coverage and annotations, the description is minimally complete for a mutation tool. However, with no output schema and multiple parameters, it lacks details on return values, error handling, or operational constraints. It's adequate but leaves gaps that could hinder agent effectiveness in complex scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning about parameters—it doesn't explain 'record_data' structure, 'resource_type' implications, or 'return_details' effects. Baseline score of 3 is appropriate as the schema carries the burden, but the description doesn't compensate with extra insights.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and resource ('existing record of any supported type'), making the purpose immediately understandable. It distinguishes from siblings like 'create-record' (new vs existing) and 'delete-record' (update vs remove). However, it doesn't specify what 'update' entails operationally beyond the general concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing record ID), compare to similar tools like 'update-list-entry' or 'batch-operations', or indicate scenarios where other tools might be more appropriate. Usage is implied but not explicitly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
33 tool updates
v1.0.0- First observed
aaa-health-check - First observed
add-record-to-list - First observed
advanced-filter-list-entries - First observed
advanced-search - First observed
batch-operations - First observed
batch-search - First observed
create-note - First observed
create-record - First observed
delete-record - First observed
discover-attributes - First observed
fetch - First observed
filter-list-entries - First observed
filter-list-entries-by-parent - First observed
filter-list-entries-by-parent-id - First observed
get-attributes - First observed
get-detailed-info - First observed
get-list-details - First observed
get-list-entries - First observed
get-lists - First observed
get-record-details - First observed
get-record-list-memberships - First observed
get-workspace-member - First observed
list-notes - First observed
list-workspace-members - First observed
remove-record-from-list - First observed
search - First observed
search-by-content - First observed
search-by-relationship - First observed
search-by-timeframe - First observed
search-records - First observed
search-workspace-members - First observed
update-list-entry - First observed
update-record
TDQS
The tool set has clear distinctions in many areas, such as create/update/delete operations, but there is significant overlap among search and filter tools (e.g., advanced-search, search, search-records, filter-list-entries, advanced-filter-list-entries) that could confuse an agent about which to use for specific queries. Descriptions help differentiate some, but the boundaries are not always sharp.
Most tools follow a consistent verb-noun or verb-noun-phrase pattern (e.g., create-record, update-list-entry, get-lists), with clear and readable naming. Minor deviations exist, such as 'aaa-health-check' starting with 'aaa' and 'fetch' being a single verb, but overall the naming is predictable and well-structured.
With 33 tools, the count is borderline high for a CRM server, as it may feel heavy and overwhelming for agents to navigate. While the domain is broad, many tools could potentially be consolidated (e.g., multiple search variants), making the set less streamlined than ideal for efficient use.
The tool surface provides comprehensive coverage for CRM operations, including full CRUD for records and lists, advanced filtering, searching across various dimensions, batch operations, and management of notes and workspace members. There are no obvious gaps, and agents can handle complete workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Related MCP Servers
-licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables Claude Desktop users to interact directly with PostHog, allowing them to view projects and create annotations through natural language commands.10-- AlicenseBqualityDmaintenanceA Model Context Protocol server implementation that enables AI assistants to interact with Apollo.io data, performing operations like people/organization enrichment, searching, and retrieving job postings through natural language commands.79340MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that integrates AI assistants with Zoho CRM, enabling contact and deal management operations through natural language.2MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server implementation that enables AI assistants to interact with Apollo.io data, allowing for people and organization enrichment, search capabilities, and job posting retrieval through natural language commands.793MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kesslerio/attio-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server