Skip to main content
Glama
MIGRATION-GUIDE.md14.9 kB
# Migration Guide This guide covers two major migrations: 1. **MCP-Compliant Naming** (#1039) - Universal tools using `snake_case`, verb-first format 2. **Legacy Tools → Universal Tools** (#1022) - Resource-specific tools consolidation --- ## Migration 1: MCP-Compliant Naming (#1039) **Status**: Old tool names deprecated (Q1 2026 removal target) **Issue**: #1039 **Effective**: Current version ### Overview All universal tools have been renamed to follow MCP ecosystem standards: - **Format**: `snake_case` (not kebab-case) - **Pattern**: Verb-first (not noun-first) - **Examples**: `search_records`, `get_record_details`, `create_record` ### Why MCP-Compliant Naming? - **Ecosystem Alignment**: Matches Desktop Commander, SEP-986, and official MCP docs - **Consistency**: All MCP servers use `snake_case`, verb-first pattern - **Standards Compliance**: Follows de-facto MCP conventions (`get_weather`, `list_repos`, `read_file`) ### Complete Naming Migration Table | Old Name (Deprecated) | New Name (MCP-Compliant) | Category | | --------------------------------- | --------------------------------- | --------------------- | | `records_search` | `search_records` | Universal Search | | `records_get_details` | `get_record_details` | Universal Metadata | | `records_get_attributes` | `get_record_attributes` | Universal Metadata | | `records_discover_attributes` | `discover_record_attributes` | Universal Metadata | | `records_get_attribute_options` | `get_record_attribute_options` | Universal Metadata | | `records_get_info` | `get_record_info` | Universal Metadata | | `records_search_advanced` | `search_records_advanced` | Advanced Search | | `records_search_by_relationship` | `search_records_by_relationship` | Advanced Search | | `records_search_by_content` | `search_records_by_content` | Advanced Search | | `records_search_by_timeframe` | `search_records_by_timeframe` | Advanced Search | | `records_batch` | `batch_records` | Batch Operations | | `records_search_batch` | `batch_search_records` | Batch Operations | | `create-record` | `create_record` | CRUD Operations | | `update-record` | `update_record` | CRUD Operations | | `delete-record` | `delete_record` | CRUD Operations | | `create-note` | `create_note` | Note Operations | | `list-notes` | `list_notes` | Note Operations | | `smithery-debug-config` | `smithery_debug_config` | Debug/Diagnostics | ### Backward Compatibility **Dual Alias Support**: Both old formats continue to work until v2.0.0: - Old noun-verb snake_case (e.g., `records_search`, `records_get_details`) - Old kebab-case (e.g., `create-record`, `update-record`) - Both emit deprecation warnings pointing to new canonical names ### Migration Examples #### Example 1: Search Records **Old (deprecated)**: ```json { "tool": "records_search", "params": { "resource_type": "companies" } } ``` **New (MCP-compliant)**: ```json { "tool": "search_records", "params": { "resource_type": "companies" } } ``` #### Example 2: Create Record **Old (deprecated)**: ```json { "tool": "create-record", "params": { "resource_type": "people" } } ``` **New (MCP-compliant)**: ```json { "tool": "create_record", "params": { "resource_type": "people" } } ``` #### Example 3: Get Record Details **Old (deprecated)**: ```json { "tool": "records_get_details", "params": { "resource_type": "companies", "record_id": "abc123" } } ``` **New (MCP-compliant)**: ```json { "tool": "get_record_details", "params": { "resource_type": "companies", "record_id": "abc123" } } ``` ### Testing Your Migration 1. **Find old tool names**: Search your codebase for deprecated patterns 2. **Replace systematically**: Use the table above for 1:1 replacements 3. **Verify no warnings**: Run your application and check logs for deprecation warnings 4. **Update tests**: Ensure test assertions use new canonical names --- ## Migration 2: Legacy Tools → Universal Tools (#1022) **Status**: Legacy tools deprecated (Q1 2026 removal target) **Issue**: #1022 **Effective**: v1.3.7 ### Overview Legacy resource-specific tools (86 tools) are being consolidated into universal tools (20 tools) for better consistency, maintainability, and user experience. ### Why Universal Tools? - **Consistency**: Single API for all resource types - **Simplicity**: 65% reduction in tool count (86 → 20 tools) - **Maintainability**: One implementation, fewer edge cases - **Better Error Messages**: Standardized error handling across resources ### Timeline - **Now**: Legacy tools deprecated, accessible via `DISABLE_UNIVERSAL_TOOLS=true` - **Q1 2026**: Legacy tools removed in v2.0.0 ### Environment Variables - **Default (no env var)**: Universal tools enabled ✓ - **`DISABLE_UNIVERSAL_TOOLS=true`**: Enables legacy tools (deprecated) > **Note**: `DISABLE_UNIVERSAL_TOOLS` is a legacy flag name. Setting it to `true` **enables** legacy tools, not disables universal tools. ## Quick Reference ### Core Universal Tools | Operation | Universal Tool | Legacy Equivalents | | ------------------- | --------------------------- | ---------------------------------------------------- | | Search records | `search_records` | `search-companies`, `search-people`, `list-tasks` | | Get details | `get_record_details` | `get-company-details`, `get-person-details` | | Create record | `create_record` | `create-company`, `create-person`, `create-task` | | Update record | `update_record` | `update-company`, `update-task` | | Delete record | `delete_record` | `delete-company`, `delete-task` | | Get attributes | `get_record_attributes` | `get-company-attributes` | | Discover attributes | `discover_record_attributes`| `discover-company-attributes` | | Get detailed info | `get_record_info` | `get-company-basic-info`, `get-company-contact-info` | ### Advanced Universal Tools | Operation | Universal Tool | Legacy Equivalents | | ---------------------- | ------------------------------- | ---------------------------------------------------------------------- | | Advanced search | `search_records_advanced` | `advanced-search-companies`, `advanced-search-people` | | Search by relationship | `search_records_by_relationship`| `search-companies-by-people`, `search-people-by-company` | | Search by content | `search_records_by_content` | `search-companies-by-notes`, `search-people-by-notes` | | Search by timeframe | `search_records_by_timeframe` | `search-people-by-creation-date`, `search-people-by-modification-date` | | Batch operations | `batch_records` | `batch-create-companies`, `batch-update-companies` | | Batch search | `batch_search_records` | `batch-search-companies` | ## Migration Examples ### Example 1: Search Companies → Search Records **Legacy**: ```json { "tool": "search-companies", "params": { "query": "Acme Corp" } } ``` **Universal (MCP-compliant)**: ```json { "tool": "search_records", "params": { "resource_type": "companies", "query": "Acme Corp" } } ``` ### Example 2: Create Person → Create Record **Legacy**: ```json { "tool": "create-person", "params": { "name": "John Doe", "email": "john@example.com" } } ``` **Universal (MCP-compliant)**: ```json { "tool": "create_record", "params": { "resource_type": "people", "attributes": { "name": "John Doe", "email": "john@example.com" } } } ``` ### Example 3: Update Task → Update Record **Legacy**: ```json { "tool": "update-task", "params": { "task_id": "abc-123", "content": "Updated task description" } } ``` **Universal (MCP-compliant)**: ```json { "tool": "update_record", "params": { "resource_type": "tasks", "record_id": "abc-123", "attributes": { "content": "Updated task description" } } } ``` ### Example 4: Batch Operations **Legacy**: ```json { "tool": "batch-create-companies", "params": { "companies": [...] } } ``` **Universal (MCP-compliant)**: ```json { "tool": "batch_records", "params": { "resource_type": "companies", "operation": "create", "records": [...] } } ``` ## Complete Mapping Table > **Note**: This mapping table may lag behind code changes. Use tool discovery output or the source definitions in `src/handlers/tool-configs/universal/index.ts:deprecatedToolMappings` as the authoritative reference. ### Company Tools | Legacy Tool | Universal Tool | Resource Type | | ----------------------------- | -------------------------------- | ------------- | | `search-companies` | `search_records` | `companies` | | `get-company-details` | `get_record_details` | `companies` | | `create-company` | `create_record` | `companies` | | `update-company` | `update_record` | `companies` | | `delete-company` | `delete_record` | `companies` | | `get-company-attributes` | `get_record_attributes` | `companies` | | `discover-company-attributes` | `discover_record_attributes` | `companies` | | `get-company-basic-info` | `get_record_info` | `companies` | | `get-company-contact-info` | `get_record_info` | `companies` | | `get-company-business-info` | `get_record_info` | `companies` | | `get-company-social-info` | `get_record_info` | `companies` | | `advanced-search-companies` | `search_records_advanced` | `companies` | | `search-companies-by-notes` | `search_records_by_content` | `companies` | | `search-companies-by-people` | `search_records_by_relationship` | `companies` | | `batch-create-companies` | `batch_records` | `companies` | | `batch-update-companies` | `batch_records` | `companies` | | `batch-delete-companies` | `batch_records` | `companies` | | `batch-search-companies` | `batch_search_records` | `companies` | | `batch-get-company-details` | `batch_records` | `companies` | ### People Tools | Legacy Tool | Universal Tool | Resource Type | | ------------------------------------ | -------------------------------- | ------------- | | `search-people` | `search_records` | `people` | | `get-person-details` | `get_record_details` | `people` | | `create-person` | `create_record` | `people` | | `advanced-search-people` | `search_records_advanced` | `people` | | `search-people-by-company` | `search_records_by_relationship` | `people` | | `search-people-by-activity` | `search_records_by_content` | `people` | | `search-people-by-notes` | `search_records_by_content` | `people` | | `search-people-by-creation-date` | `search_records_by_timeframe` | `people` | | `search-people-by-modification-date` | `search_records_by_timeframe` | `people` | | `search-people-by-last-interaction` | `search_records_by_timeframe` | `people` | ### Task Tools | Legacy Tool | Universal Tool | Resource Type | | ------------- | ---------------- | ------------- | | `create-task` | `create_record` | `tasks` | | `update-task` | `update_record` | `tasks` | | `delete-task` | `delete_record` | `tasks` | | `list-tasks` | `search_records` | `tasks` | ### Record Tools | Legacy Tool | Universal Tool | Resource Type | | ---------------------- | --------------------- | ------------- | | `get-record` | `get_record_details` | (any) | | `list-records` | `search_records` | (any) | | `batch-create-records` | `batch_records` | (any) | | `batch-update-records` | `batch_records` | (any) | ## Parameter Transformations ### Common Parameter Changes | Legacy Parameter | Universal Parameter | Notes | | -------------------- | ------------------- | ------------------------------- | | `company_id` | `record_id` | Unified identifier | | `person_id` | `record_id` | Unified identifier | | `task_id` | `record_id` | Unified identifier | | Top-level attributes | `attributes` object | Nested structure | | N/A | `resource_type` | **Required** in universal tools | ### Attributes Nesting Legacy tools accepted attributes at the top level: ```json { "name": "Acme Corp", "domain": "acme.com" } ``` Universal tools require attributes in an `attributes` object: ```json { "resource_type": "companies", "attributes": { "name": "Acme Corp", "domain": "acme.com" } } ``` ## Testing Your Migration ### 1. Enable Legacy Tools (temporary) ```bash DISABLE_UNIVERSAL_TOOLS=true npm run dev ``` ### 2. Run Side-by-Side Tests Test both legacy and universal tools with the same data to verify identical results. ### 3. Switch to Universal Tools Remove `DISABLE_UNIVERSAL_TOOLS` to use universal tools by default. ### 4. Verify No Warnings Run your application - you should see NO deprecation warnings. ## Need Help? - **Documentation**: See `test/legacy/README.md` for test examples - **Tool Aliases**: Automatic aliasing available via `MCP_DISABLE_TOOL_ALIASES=false` - **Issues**: Report migration issues at https://github.com/kesslerio/attio-mcp-server/issues ## Related Documentation - [Universal Tool API Reference](../README.md#universal-tools) - [Legacy Test Files](../test/legacy/README.md) - [Tool Configuration](../src/handlers/tool-configs/universal/index.ts)

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