Skip to main content
Glama
kesslerio

Attio MCP Server

by kesslerio

Attio MCP Server

License: Apache 2.0 npm version Node.js Version GitHub Release Ask DeepWiki npm provenance

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_records and search_records_advanced

  • Scoped Writes: Create and update companies with create_company and update_company

  • Full 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_relationship

  • Batch Operations: Process hundreds of companies with batch_records

  • Detailed 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_relationship

  • Activity Timeline: Track interactions with search_records_by_content and search_records_by_timeframe

  • Advanced 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 modes

    • manage-list-entry - Unified entry management with 3 modes

    • get-list-entries - Retrieve list entries

    • get-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_deal and update_deal

Task Management

  • Universal Task Operations: Create, update, and manage tasks with universal tools

  • Record Linking: Associate tasks with any record type using resource_type parameter

  • Progress 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

npx attio-discover generate-skill --all --zip

attio-skill-generator

Create custom workflow skills (advanced)

Python + prompting

Quick Start (solves "wrong field name" errors):

npx attio-discover generate-skill --all --zip
# Import ZIP into Claude Desktop: Settings > Skills > Install Skill

See Skills Documentation for complete setup and usage guides.

💬 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

people_search.v1

Find people by title, company, territory

query, limit, format

Find AE in fintech, SF

company_search.v1

Query companies by domain, segment, plan

query, limit, format

Find SaaS companies >100 employees

deal_search.v1

Filter deals by owner, stage, value, close date

query, limit, format

Find deals >$50k closing Q1

log_activity.v1

Log calls/meetings/emails to records

target, type, summary, dry_run

Log call with Nina at Acme

create_task.v1

Create tasks with natural language due dates

title, content, due_date, dry_run

Create task: Follow up tomorrow

advance_deal.v1

Move deal to target stage with next action

deal, target_stage, create_task, dry_run

Advance deal to "Proposal Sent"

add_to_list.v1

Add records to a List by name or ID

records, list, dry_run

Add 5 companies to Q1 Outreach

qualify_lead.v1

Research lead with web + BANT/CHAMP scoring

target, framework, limit_web, dry_run

Qualify Acme Corp with BANT

meeting_prep.v1

360° prep: notes, tasks, deals, agenda

target, format, verbosity

Prep for meeting with Acme CEO

pipeline_health.v1

Weekly snapshot: created/won/slipped + risks

owner, timeframe, segment

Pipeline health for @me last 30d

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=true for token counts in responses

  • Telemetry: Set PROMPT_TELEMETRY_ENABLED=true for usage logging

  • Configurable Limits: Override with MAX_PROMPT_TOKENS environment variable

For complete prompt documentation, see docs/prompts/v1-catalog.md.

⚠️ Known Limitations & Important Notes

Current Limitations

  • Field Parameter Filtering: Tasks endpoint /objects/tasks/attributes has limitations, handled with fallback patterns

  • Pagination: 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=true environment 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_MODE in Smithery configuration for full access.

  • Search-Only Mode: To restrict to read-only tools (search, fetch, aaa-health-check), explicitly configure ATTIO_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 (not attio-mcp-server). The GitHub repository is named attio-mcp-server, but the npm package was renamed to attio-mcp in June 2025. Installing attio-mcp-server will 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:


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 | bash

Cursor IDE

curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-cursor.sh | bash

Claude Code (CLI)

curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-code.sh | bash

These scripts will:

  • Install attio-mcp npm 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-mcp

Step 2: Find your config file

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

  • Windows: %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-mcp

Step 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

echo '{"command":"attio-mcp","env":{"ATTIO_API_KEY":"your_key_here"}}' | claude mcp add-json attio-mcp --stdin -s user

Option 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 build

Run directly:

ATTIO_API_KEY=your_key node dist/index.js
# Global installation for CLI usage
npm install -g attio-mcp

# Or local installation for project integration
npm install attio-mcp

Tier 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 deploy

Client 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_options tool (#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-delay flag

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_array for 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

records_search

search_records

Verb-first pattern

records_get_details

get_record_details

Verb-first pattern

records_get_attributes

get_record_attributes

Verb-first pattern

records_discover_attributes

discover_record_attributes

Verb-first pattern

records_search_advanced

search_records_advanced

Verb-first pattern

records_search_by_relationship

search_records_by_relationship

Verb-first pattern

records_search_by_content

search_records_by_content

Verb-first pattern

records_search_by_timeframe

search_records_by_timeframe

Verb-first pattern

records_batch

batch_records

Verb-first pattern

search-records

search_records

snake_case format

get-record-details

get_record_details

snake_case format

create-record

create_record

snake_case format

update-record

update_record

snake_case format

delete-record

delete_record

snake_case format

create-note

create_note

snake_case format

list-notes

list_notes

snake_case format

smithery-debug-config

smithery_debug_config

snake_case format

Action Required: Update your integrations to use new tool names before Q1 2026. See MIGRATION-GUIDE.md for the complete migration table.


⚡ 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)

ATTIO_API_KEY

Long-term integrations, personal use

OAuth Access Token

ATTIO_ACCESS_TOKEN

OAuth integrations, third-party apps

Note: If both are set, ATTIO_API_KEY takes 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 values

2. Test the Installation

# Test the MCP server
attio-mcp --help

# Discover your Attio workspace attributes
attio-discover attributes

3. 🎯 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" sections

Configuration 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.json is merged on top of default.json, so only include overrides and additions. Don't duplicate mappings that already exist in default.json.

How Configuration Merging Works

The MCP server loads configuration in this order:

  1. default.json - Contains all standard Attio fields (Name, Description, Team, etc.)

  2. 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 credentials

For maximum supply chain protection, install with pnpm v10+ which enforces:

  • trustPolicy: no-downgrade — blocks versions published with weaker credentials than prior versions

  • minimumReleaseAge — cooldown period before new versions can be installed

📚 Documentation

Comprehensive documentation is available in the docs directory:

⚠️ Note: Universal tools documentation is currently being updated to match the latest implementation. Use the API directly or check the source code for the most accurate interface definitions.

Getting Started

Configuration

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

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:offline

Smithery CLI Development

For local development and testing with Smithery Playground:

npm run dev  # Opens Smithery Playground with local server

See docs/deployment/smithery-cli-setup.md for detailed Smithery CLI development setup.

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.

📄 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-mcp

Available Tools

33 tools
aaa-health-checkA
Read-onlyIdempotent
Inspect

Returns server status without requiring any credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
initialValuesNoInitial values for the list entry (e.g., {"stage": "Prospect"})
listIdYesID of the list to add the record to
objectTypeYesType of record (e.g., "companies", "people")
recordIdYesID of the record to add to the list

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersYesAdvanced filter configuration
limitNoMaximum number of entries to fetch (default: 20)
listIdYesID of the list to filter entries from
offsetNoNumber of entries to skip for pagination (default: 0)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

batch-operationsC
Destructive
Inspect

Perform bulk operations (create, update, delete, get, search)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
offsetNoNumber of results to skip for pagination
operation_typeNoBatch operation type (legacy format)
operationsNoArray of operations to perform
record_idsNoRecord IDs for delete/get (legacy format)
recordsNoRecord data for create/update (legacy format)
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

create-noteBInspect

Create a note for any record type (companies, people, deals)

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent of the note
record_idYesID of the record to attach the note to
resource_typeYesTarget resource type
titleYesTitle of the note

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
record_dataYesData to create
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)
return_detailsNoReturn full details

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-recordB
Destructive
Inspect

Delete a record of any supported type

ParametersJSON Schema
NameRequiredDescriptionDefault
record_idYesRecord ID to delete
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-attributesB
Read-onlyIdempotent
Inspect

Discover available attributes for any resource type

ParametersJSON Schema
NameRequiredDescriptionDefault
categoriesNoAttribute categories
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

fetchA
Read-onlyIdempotent
Inspect

Retrieve the full record payload for a search result ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifier emitted by the search tool (<resource>:<id>).

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
attributeSlugYesSlug of the attribute to filter by (e.g., 'stage', 'status')
conditionYesFilter condition (e.g., 'equals', 'contains', 'greater_than')
limitNoMaximum number of entries to fetch (default: 20)
listIdYesID of the list to filter entries from
offsetNoNumber of entries to skip for pagination (default: 0)
valueYesValue to filter by (type depends on the attribute)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionYesFilter condition (e.g., "equals", "contains", "starts_with")
limitNoMaximum number of entries to fetch (default: 20)
listIdYesID of the list to filter entries from
offsetNoNumber of entries to skip for pagination (default: 0)
parentAttributeSlugYesAttribute of the parent record to filter by (e.g., "name", "email_addresses", "categories")
parentObjectTypeYesType of the parent record (e.g., "companies", "people")
valueYesValue to filter by (type depends on the attribute)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of entries to fetch (default: 20)
listIdYesID of the list to filter entries from
offsetNoNumber of entries to skip for pagination (default: 0)
recordIdYesID of the parent record to filter by

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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-attributesB
Read-onlyIdempotent
Inspect

Get attributes for any resource type (companies, people, lists, records, tasks, deals, notes)

ParametersJSON Schema
NameRequiredDescriptionDefault
categoriesNoAttribute categories
fieldsNoSpecific attribute field names
record_idNoRecord ID to get attributes for (optional)
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-infoB
Read-onlyIdempotent
Inspect

Get specific types of detailed information (contact, business, social)

ParametersJSON Schema
NameRequiredDescriptionDefault
record_idYesUnique identifier of the record
resource_typeYesType of resource

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
listIdYesID of the list to get details for

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of entries to fetch (default: 20)
listIdYesID of the list to get entries for
offsetNoNumber of entries to skip for pagination (default: 0)

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-detailsB
Read-onlyIdempotent
Inspect

Get detailed information for any record type

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoFields to include
record_idYesRecord ID to retrieve
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

B3.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
batchSizeNoNumber of lists to process in parallel (1-20, default: 5)
includeEntryValuesNoWhether to include entry values in the response (e.g., stage, status)
objectTypeNoType of record (e.g., "companies", "people")
recordIdYesID of the record to find in lists

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
memberIdYesThe workspace member ID

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-notesB
Read-onlyIdempotent
Inspect

Get notes for any record type (companies, people, deals)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
offsetNoNumber of results to skip for pagination
parent_record_idNoAlias for record_id (backward compatibility)
record_idNoRecord ID to list notes for
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
pageSizeNoNumber of results per page
searchNoSearch by name or email

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesID of the list entry to remove
listIdYesID of the list to remove the record from

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

search-by-contentC
Read-onlyIdempotent
Inspect

Search within notes, activity, and interaction content

ParametersJSON Schema
NameRequiredDescriptionDefault
content_typeYesType of content to search
limitNoMaximum number of results to return
offsetNoNumber of results to skip for pagination
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)
search_queryYesQuery to search within content

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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-relationshipB
Read-onlyIdempotent
Inspect

Search records by their relationships to other entities

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
listIdNo(Optional) List ID (must be a valid UUID if provided)
offsetNoNumber of results to skip for pagination
relationship_typeYesRelationship type
source_idYesSource record ID
target_resource_typeNoTarget resource type

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-timeframeB
Read-onlyIdempotent
Inspect

Search records by temporal criteria (creation, modification, interaction dates)

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date (ISO 8601 format)
limitNoMaximum number of results to return
offsetNoNumber of results to skip for pagination
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)
start_dateNoStart date (ISO 8601 format)
timeframe_typeNoTimeframe filter type

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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-recordsB
Read-onlyIdempotent
Inspect

Universal search across all resource types (companies, people, records, tasks)

ParametersJSON Schema
NameRequiredDescriptionDefault
created_afterNoFilter records created after this date (ISO 8601)
created_beforeNoFilter records created before this date (ISO 8601)
date_fieldNoWhich date field to filter oncreated_at
date_fromNoStart date for filtering (ISO 8601 format)
date_toNoEnd date for filtering (ISO 8601 format)
fieldsNoFields to search (content)
filtersNoAdvanced filter conditions
limitNoMaximum number of results to return
match_typeNoString matching
offsetNoNumber of results to skip for pagination
queryNoSearch query string
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)
search_typeNoType of search
sortNoSort order
timeframeNoRelative timeframe filter
updated_afterNoFilter records updated after this date (ISO 8601)
updated_beforeNoFilter records updated before this date (ISO 8601)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for name, email, or role

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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')

ParametersJSON Schema
NameRequiredDescriptionDefault
attributesYesAttributes to update on the list entry
entryIdYesID of the list entry to update
listIdYesID of the list containing the entry

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
record_dataYesUpdated data
record_idYesRecord ID to update
resource_typeYesType of resource to operate on (companies, people, lists, records, tasks)
return_detailsNoReturn full details

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 33 tool updatesv1.0.0
    • First observedaaa-health-check
    • First observedadd-record-to-list
    • First observedadvanced-filter-list-entries
    • First observedadvanced-search
    • First observedbatch-operations
    • First observedbatch-search
    • First observedcreate-note
    • First observedcreate-record
    • First observeddelete-record
    • First observeddiscover-attributes
    • First observedfetch
    • First observedfilter-list-entries
    • First observedfilter-list-entries-by-parent
    • First observedfilter-list-entries-by-parent-id
    • First observedget-attributes
    • First observedget-detailed-info
    • First observedget-list-details
    • First observedget-list-entries
    • First observedget-lists
    • First observedget-record-details
    • First observedget-record-list-memberships
    • First observedget-workspace-member
    • First observedlist-notes
    • First observedlist-workspace-members
    • First observedremove-record-from-list
    • First observedsearch
    • First observedsearch-by-content
    • First observedsearch-by-relationship
    • First observedsearch-by-timeframe
    • First observedsearch-records
    • First observedsearch-workspace-members
    • First observedupdate-list-entry
    • First observedupdate-record

TDQS

B3.2/5.0
Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness5/5

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

ActivityNo data
ResponsivenessSyncing

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

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A 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
    -
  • A
    license
    B
    quality
    D
    maintenance
    A 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.
    7
    93
    40
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that integrates AI assistants with Zoho CRM, enabling contact and deal management operations through natural language.
    2
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A 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.
    7
    93
    MIT

Latest Blog Posts

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