attio-mcp 1.3.5 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +263 -9
- package/README.md +315 -235
- package/dist/api/attio-client.d.ts +13 -3
- package/dist/api/attio-client.d.ts.map +1 -1
- package/dist/api/attio-client.js +37 -7
- package/dist/api/attio-client.js.map +1 -1
- package/dist/api/attribute-types.d.ts.map +1 -1
- package/dist/api/attribute-types.js +59 -29
- package/dist/api/attribute-types.js.map +1 -1
- package/dist/api/client-context.d.ts.map +1 -1
- package/dist/api/client-context.js +28 -42
- package/dist/api/client-context.js.map +1 -1
- package/dist/api/operations/batch.d.ts.map +1 -1
- package/dist/api/operations/batch.js +3 -1
- package/dist/api/operations/batch.js.map +1 -1
- package/dist/cli/commands/generate-skill.d.ts +28 -0
- package/dist/cli/commands/generate-skill.d.ts.map +1 -0
- package/dist/cli/commands/generate-skill.js +101 -0
- package/dist/cli/commands/generate-skill.js.map +1 -0
- package/dist/cli/discover.js +65 -0
- package/dist/cli/discover.js.map +1 -1
- package/dist/config/deal-defaults.d.ts +2 -2
- package/dist/config/deal-defaults.d.ts.map +1 -1
- package/dist/config/deal-defaults.js +15 -6
- package/dist/config/deal-defaults.js.map +1 -1
- package/dist/config/tool-aliases.d.ts +12 -0
- package/dist/config/tool-aliases.d.ts.map +1 -1
- package/dist/config/tool-aliases.js +213 -69
- package/dist/config/tool-aliases.js.map +1 -1
- package/dist/constants/tool-names.d.ts +84 -0
- package/dist/constants/tool-names.d.ts.map +1 -0
- package/dist/constants/tool-names.js +81 -0
- package/dist/constants/tool-names.js.map +1 -0
- package/dist/constants/universal.constants.d.ts +24 -0
- package/dist/constants/universal.constants.d.ts.map +1 -1
- package/dist/constants/universal.constants.js +81 -9
- package/dist/constants/universal.constants.js.map +1 -1
- package/dist/handlers/tool-configs/tasks.d.ts.map +1 -1
- package/dist/handlers/tool-configs/tasks.js +28 -0
- package/dist/handlers/tool-configs/tasks.js.map +1 -1
- package/dist/handlers/tool-configs/universal/batch-search.js +4 -4
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
- package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/crud-operations.js +52 -13
- package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
- package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
- package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
- package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
- package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/index.js +24 -22
- package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
- package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/notes-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/notes-operations.js +27 -12
- package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/record-details-operations.js +20 -3
- package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/core/search-operations.js +11 -4
- package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
- package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
- package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
- package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
- package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
- package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
- package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
- package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/index.js +58 -58
- package/dist/handlers/tool-configs/universal/index.js.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/advanced-search.js +5 -4
- package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
- package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/content-search.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
- package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
- package/dist/handlers/tool-configs/universal/operations/relationship-search.js +3 -3
- package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +3 -3
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
- package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
- package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
- package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/schemas.js +1 -1
- package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +20 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/shared-handlers.js +216 -0
- package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
- package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
- package/dist/handlers/tool-configs/universal/types.d.ts +9 -0
- package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
- package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
- package/dist/handlers/tool-configs/universal/validators/schema-validator.js +63 -9
- package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
- package/dist/handlers/tool-types.d.ts +9 -0
- package/dist/handlers/tool-types.d.ts.map +1 -1
- package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
- package/dist/handlers/tools/dispatcher/core.js +24 -5
- package/dist/handlers/tools/dispatcher/core.js.map +1 -1
- package/dist/handlers/tools/formatters.d.ts +8 -1
- package/dist/handlers/tools/formatters.d.ts.map +1 -1
- package/dist/handlers/tools/formatters.js +30 -14
- package/dist/handlers/tools/formatters.js.map +1 -1
- package/dist/handlers/tools/registry.d.ts +125 -84
- package/dist/handlers/tools/registry.d.ts.map +1 -1
- package/dist/handlers/tools/registry.js +14 -9
- package/dist/handlers/tools/registry.js.map +1 -1
- package/dist/handlers/tools/standards/index.d.ts.map +1 -1
- package/dist/handlers/tools/standards/index.js +19 -11
- package/dist/handlers/tools/standards/index.js.map +1 -1
- package/dist/objects/companies/attributes.d.ts +5 -0
- package/dist/objects/companies/attributes.d.ts.map +1 -1
- package/dist/objects/companies/attributes.js +45 -31
- package/dist/objects/companies/attributes.js.map +1 -1
- package/dist/server/createServer.d.ts.map +1 -1
- package/dist/server/createServer.js +4 -3
- package/dist/server/createServer.js.map +1 -1
- package/dist/services/ErrorService.js +3 -3
- package/dist/services/ErrorService.js.map +1 -1
- package/dist/services/UniversalCreateService.d.ts.map +1 -1
- package/dist/services/UniversalCreateService.js +136 -12
- package/dist/services/UniversalCreateService.js.map +1 -1
- package/dist/services/UniversalSearchService.d.ts +4 -25
- package/dist/services/UniversalSearchService.d.ts.map +1 -1
- package/dist/services/UniversalSearchService.js +14 -324
- package/dist/services/UniversalSearchService.js.map +1 -1
- package/dist/services/UniversalUpdateService.d.ts +15 -4
- package/dist/services/UniversalUpdateService.d.ts.map +1 -1
- package/dist/services/UniversalUpdateService.js +79 -151
- package/dist/services/UniversalUpdateService.js.map +1 -1
- package/dist/services/create/factory.d.ts.map +1 -1
- package/dist/services/create/factory.js +2 -1
- package/dist/services/create/factory.js.map +1 -1
- package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
- package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
- package/dist/services/metadata/AttributeOptionsService.js +92 -0
- package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
- package/dist/services/metadata/index.d.ts +1 -0
- package/dist/services/metadata/index.d.ts.map +1 -1
- package/dist/services/metadata/index.js +1 -0
- package/dist/services/metadata/index.js.map +1 -1
- package/dist/services/search/QueryApiService.d.ts +27 -0
- package/dist/services/search/QueryApiService.d.ts.map +1 -0
- package/dist/services/search/QueryApiService.js +144 -0
- package/dist/services/search/QueryApiService.js.map +1 -0
- package/dist/services/search/RecordsSearchService.d.ts +27 -0
- package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
- package/dist/services/search/RecordsSearchService.js +122 -0
- package/dist/services/search/RecordsSearchService.js.map +1 -0
- package/dist/services/search/SearchCoordinator.d.ts +41 -0
- package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
- package/dist/services/search/SearchCoordinator.js +83 -0
- package/dist/services/search/SearchCoordinator.js.map +1 -0
- package/dist/services/search/StrategyFactory.d.ts +31 -0
- package/dist/services/search/StrategyFactory.d.ts.map +1 -0
- package/dist/services/search/StrategyFactory.js +100 -0
- package/dist/services/search/StrategyFactory.js.map +1 -0
- package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
- package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
- package/dist/services/skill-generator/OutputWriterService.js +100 -0
- package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
- package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
- package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
- package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
- package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
- package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
- package/dist/services/skill-generator/index.d.ts +12 -0
- package/dist/services/skill-generator/index.d.ts.map +1 -0
- package/dist/services/skill-generator/index.js +11 -0
- package/dist/services/skill-generator/index.js.map +1 -0
- package/dist/services/skill-generator/types.d.ts +137 -0
- package/dist/services/skill-generator/types.d.ts.map +1 -0
- package/dist/services/skill-generator/types.js +10 -0
- package/dist/services/skill-generator/types.js.map +1 -0
- package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
- package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
- package/dist/services/update/FieldPersistenceHandler.js +198 -0
- package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
- package/dist/services/update/FieldValidationHandler.d.ts +77 -0
- package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
- package/dist/services/update/FieldValidationHandler.js +157 -0
- package/dist/services/update/FieldValidationHandler.js.map +1 -0
- package/dist/services/update/MetadataResolver.d.ts +50 -0
- package/dist/services/update/MetadataResolver.d.ts.map +1 -0
- package/dist/services/update/MetadataResolver.js +110 -0
- package/dist/services/update/MetadataResolver.js.map +1 -0
- package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
- package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
- package/dist/services/update/UpdateOrchestrator.js +58 -0
- package/dist/services/update/UpdateOrchestrator.js.map +1 -0
- package/dist/services/update/UpdateValidation.d.ts +5 -1
- package/dist/services/update/UpdateValidation.d.ts.map +1 -1
- package/dist/services/update/UpdateValidation.js +46 -14
- package/dist/services/update/UpdateValidation.js.map +1 -1
- package/dist/services/value-transformer/index.d.ts +57 -0
- package/dist/services/value-transformer/index.d.ts.map +1 -0
- package/dist/services/value-transformer/index.js +326 -0
- package/dist/services/value-transformer/index.js.map +1 -0
- package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
- package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/multi-select-transformer.js +144 -0
- package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
- package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
- package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/record-reference-transformer.js +245 -0
- package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
- package/dist/services/value-transformer/select-transformer.d.ts +48 -0
- package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/select-transformer.js +232 -0
- package/dist/services/value-transformer/select-transformer.js.map +1 -0
- package/dist/services/value-transformer/status-transformer.d.ts +32 -0
- package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
- package/dist/services/value-transformer/status-transformer.js +294 -0
- package/dist/services/value-transformer/status-transformer.js.map +1 -0
- package/dist/services/value-transformer/types.d.ts +100 -0
- package/dist/services/value-transformer/types.d.ts.map +1 -0
- package/dist/services/value-transformer/types.js +6 -0
- package/dist/services/value-transformer/types.js.map +1 -0
- package/dist/templates/skill/SKILL.template.md +78 -0
- package/dist/templates/skill/attribute-reference.template.md +126 -0
- package/dist/templates/skill/complex-types.template.md +255 -0
- package/dist/utils/client-resolver.d.ts.map +1 -1
- package/dist/utils/client-resolver.js +8 -16
- package/dist/utils/client-resolver.js.map +1 -1
- package/dist/utils/complex-type-validation.d.ts +16 -0
- package/dist/utils/complex-type-validation.d.ts.map +1 -0
- package/dist/utils/complex-type-validation.js +196 -0
- package/dist/utils/complex-type-validation.js.map +1 -0
- package/dist/utils/error-utilities.d.ts.map +1 -1
- package/dist/utils/error-utilities.js +16 -9
- package/dist/utils/error-utilities.js.map +1 -1
- package/dist/utils/location-normalizer.d.ts +26 -0
- package/dist/utils/location-normalizer.d.ts.map +1 -0
- package/dist/utils/location-normalizer.js +39 -0
- package/dist/utils/location-normalizer.js.map +1 -0
- package/dist/utils/metadata-utils.d.ts +27 -0
- package/dist/utils/metadata-utils.d.ts.map +1 -0
- package/dist/utils/metadata-utils.js +59 -0
- package/dist/utils/metadata-utils.js.map +1 -0
- package/dist/utils/personal-name-parser.d.ts.map +1 -1
- package/dist/utils/personal-name-parser.js +26 -17
- package/dist/utils/personal-name-parser.js.map +1 -1
- package/dist/validators/company/field_detector.d.ts.map +1 -1
- package/dist/validators/company/field_detector.js +5 -0
- package/dist/validators/company/field_detector.js.map +1 -1
- package/package.json +28 -25
package/README.md
CHANGED
|
@@ -54,17 +54,17 @@ Transform your CRM workflows with AI-powered automation. Instead of clicking thr
|
|
|
54
54
|
|
|
55
55
|
### 📊 **Company Management**
|
|
56
56
|
|
|
57
|
-
- **Universal Search**: Find companies with `
|
|
57
|
+
- **Universal Search**: Find companies with `search_records` and `search_records_advanced`
|
|
58
58
|
- **Full CRUD**: Create, read, update, and delete with universal record operations
|
|
59
|
-
- **Relationship Discovery**: Find companies through `
|
|
60
|
-
- **Batch Operations**: Process hundreds of companies with `
|
|
61
|
-
- **Detailed Information**: Get contact, business, and social info with `
|
|
59
|
+
- **Relationship Discovery**: Find companies through `search_records_by_relationship`
|
|
60
|
+
- **Batch Operations**: Process hundreds of companies with `batch_records`
|
|
61
|
+
- **Detailed Information**: Get contact, business, and social info with `get_record_info`
|
|
62
62
|
|
|
63
63
|
### 👥 **People Management**
|
|
64
64
|
|
|
65
65
|
- **Universal Contact Search**: Find people by any criteria using universal search tools
|
|
66
|
-
- **Relationship Tracking**: Link people to companies with `
|
|
67
|
-
- **Activity Timeline**: Track interactions with `
|
|
66
|
+
- **Relationship Tracking**: Link people to companies with `search_records_by_relationship`
|
|
67
|
+
- **Activity Timeline**: Track interactions with `search_records_by_content` and `search_records_by_timeframe`
|
|
68
68
|
- **Advanced Filtering**: Multi-attribute search with universal filtering
|
|
69
69
|
- **Bulk Operations**: Efficiently manage contacts with universal batch operations
|
|
70
70
|
|
|
@@ -91,6 +91,25 @@ Transform your CRM workflows with AI-powered automation. Instead of clicking thr
|
|
|
91
91
|
- **Data Export**: JSON serialization for integrations
|
|
92
92
|
- **Real-time Updates**: Live data synchronization with Attio
|
|
93
93
|
|
|
94
|
+
### 🧠 **Claude Skills**
|
|
95
|
+
|
|
96
|
+
Supercharge Claude's Attio knowledge with pre-built skills that prevent common errors and teach best practices.
|
|
97
|
+
|
|
98
|
+
| Skill | Purpose | Setup |
|
|
99
|
+
| -------------------------- | ---------------------------------------------- | ----------------------------------------------- |
|
|
100
|
+
| **attio-mcp-usage** | Error prevention + universal workflow patterns | Bundled - just use it |
|
|
101
|
+
| **attio-workspace-schema** | YOUR workspace's exact field names and options | `npx attio-discover generate-skill --all --zip` |
|
|
102
|
+
| **attio-skill-generator** | Create custom workflow skills (advanced) | Python + prompting |
|
|
103
|
+
|
|
104
|
+
**Quick Start** (solves "wrong field name" errors):
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npx attio-discover generate-skill --all --zip
|
|
108
|
+
# Import ZIP into Claude Desktop: Settings > Skills > Install Skill
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
See [Skills Documentation](./docs/usage/skills/README.md) for complete setup and usage guides.
|
|
112
|
+
|
|
94
113
|
### 💬 **Pre-Built Prompts** (10 Prompts)
|
|
95
114
|
|
|
96
115
|
Intelligent shortcuts that help Claude work faster with your CRM data:
|
|
@@ -177,7 +196,7 @@ For complete prompt documentation, see [docs/prompts/v1-catalog.md](./docs/promp
|
|
|
177
196
|
### 🤝 **OpenAI MCP Compatibility**
|
|
178
197
|
|
|
179
198
|
- **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.
|
|
180
|
-
- **Full Tool Access (Default)**: All
|
|
199
|
+
- **Full Tool Access (Default)**: All 35 tools are exposed by default (21 universal + 11 list + 3 workspace member). Do NOT set `ATTIO_MCP_TOOL_MODE` in Smithery configuration for full access.
|
|
181
200
|
- **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.
|
|
182
201
|
- **Detailed Guide**: See [docs/chatgpt-developer-mode.md](./docs/chatgpt-developer-mode.md) for environment variables, approval flows, and validation tips.
|
|
183
202
|
- **User Documentation**: See the [ChatGPT Developer Mode docs](./docs/chatgpt-developer-mode.md) for a complete walkthrough of approval flows and setup instructions.
|
|
@@ -190,207 +209,226 @@ For complete prompt documentation, see [docs/prompts/v1-catalog.md](./docs/promp
|
|
|
190
209
|
|
|
191
210
|
For detailed troubleshooting and solutions, see [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) and [GitHub Issues](https://github.com/kesslerio/attio-mcp-server/issues).
|
|
192
211
|
|
|
193
|
-
## 🎯 **
|
|
212
|
+
## 🎯 **Advanced Search Filters**
|
|
194
213
|
|
|
195
|
-
|
|
214
|
+
Build powerful CRM queries with multi-criteria AND/OR filtering. See the [Advanced Search Guide](./docs/usage/advanced-search.md) for complete examples and operator reference.
|
|
196
215
|
|
|
197
|
-
|
|
216
|
+
## 🚀 Installation
|
|
198
217
|
|
|
199
|
-
|
|
218
|
+
> ⚠️ **IMPORTANT: Correct Package Name**
|
|
219
|
+
>
|
|
220
|
+
> The npm package name is **`attio-mcp`** (not `attio-mcp-server`).
|
|
221
|
+
> The GitHub repository is named `attio-mcp-server`, but the npm package was renamed to `attio-mcp` in June 2025.
|
|
222
|
+
> Installing `attio-mcp-server` will give you an outdated v0.0.2 release with only 4 legacy tools.
|
|
200
223
|
|
|
201
|
-
|
|
224
|
+
### Client Compatibility
|
|
202
225
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
226
|
+
| Client | Smithery (Tier 1) | Local Install (Tier 2-3) | Cloudflare Worker (Tier 4) |
|
|
227
|
+
| ------------------ | ----------------- | ------------------------ | -------------------------- |
|
|
228
|
+
| Claude Desktop | ✅ Recommended | ✅ Full support | ✅ Full support |
|
|
229
|
+
| Claude Web | ✅ Recommended | N/A | ✅ Full support |
|
|
230
|
+
| ChatGPT (Pro/Plus) | ✅ Required | N/A | ✅ Full support |
|
|
231
|
+
| Cursor IDE | ✅ Supported | ✅ Full support | ✅ Full support |
|
|
232
|
+
| Claude Code (CLI) | Partial | ✅ Recommended | Partial |
|
|
233
|
+
|
|
234
|
+
**Choose your installation method:**
|
|
235
|
+
|
|
236
|
+
- **Most users**: Use [Tier 1 (Smithery)](#tier-1-smithery-one-click---recommended) - zero local config required
|
|
237
|
+
- **Local control**: Use [Tier 2 (Shell Installers)](#tier-2-shell-installers) - one command, automatic setup
|
|
238
|
+
- **Power users**: Use [Tier 3 (Manual)](#tier-3-manual-configuration) - full control over configuration
|
|
239
|
+
- **Teams/Enterprise**: Use [Tier 4 (Cloudflare Worker)](#tier-4-cloudflare-worker-remote-deployment) - self-hosted, multi-user OAuth
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
### Tier 1: Smithery (One-Click) - Recommended
|
|
244
|
+
|
|
245
|
+
> **Best for**: Claude Desktop, Claude Web, ChatGPT, Cursor - zero local installation required.
|
|
246
|
+
|
|
247
|
+
[Smithery](https://smithery.ai/server/@kesslerio/attio-mcp-server) handles OAuth, hosting, and configuration automatically.
|
|
248
|
+
|
|
249
|
+
#### Claude Desktop via Smithery
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
npx -y @smithery/cli install @kesslerio/attio-mcp-server --client claude
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### Cursor IDE via Smithery
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
npx -y @smithery/cli install @kesslerio/attio-mcp-server --client cursor
|
|
216
259
|
```
|
|
217
260
|
|
|
218
|
-
|
|
261
|
+
#### ChatGPT Developer Mode
|
|
219
262
|
|
|
220
|
-
|
|
263
|
+
ChatGPT requires Smithery for OAuth authentication. Direct server URLs are not supported.
|
|
221
264
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
265
|
+
1. Enable Developer Mode: **Settings → Connectors → Advanced → Developer Mode**
|
|
266
|
+
2. Add MCP Server URL: `https://server.smithery.ai/@kesslerio/attio-mcp-server/mcp`
|
|
267
|
+
3. Complete OAuth authorization when prompted
|
|
268
|
+
|
|
269
|
+
See [ChatGPT Developer Mode Guide](./docs/chatgpt-developer-mode.md) for detailed setup instructions.
|
|
270
|
+
|
|
271
|
+
#### Claude Web
|
|
272
|
+
|
|
273
|
+
1. Go to [Claude.ai](https://claude.ai) Settings → Connectors
|
|
274
|
+
2. Add new MCP connector
|
|
275
|
+
3. Select "Attio CRM" from Smithery marketplace
|
|
276
|
+
4. Authorize with your Attio account
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
### Tier 2: Shell Installers
|
|
281
|
+
|
|
282
|
+
> **Best for**: Developers who prefer local installations with automatic configuration.
|
|
283
|
+
|
|
284
|
+
One-command scripts that install `attio-mcp` and configure your client automatically.
|
|
285
|
+
|
|
286
|
+
#### Claude Desktop
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-desktop.sh | bash
|
|
235
290
|
```
|
|
236
291
|
|
|
237
|
-
|
|
292
|
+
#### Cursor IDE
|
|
238
293
|
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
"resource_type": "companies",
|
|
242
|
-
"filters": {
|
|
243
|
-
"filters": [
|
|
244
|
-
{
|
|
245
|
-
"attribute": { "slug": "name" },
|
|
246
|
-
"condition": "contains",
|
|
247
|
-
"value": "Tech"
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
"attribute": { "slug": "employee_count" },
|
|
251
|
-
"condition": "greater_than",
|
|
252
|
-
"value": 50
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
"attribute": { "slug": "industry" },
|
|
256
|
-
"condition": "equals",
|
|
257
|
-
"value": "AI/Machine Learning"
|
|
258
|
-
}
|
|
259
|
-
]
|
|
260
|
-
}
|
|
261
|
-
}
|
|
294
|
+
```bash
|
|
295
|
+
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-cursor.sh | bash
|
|
262
296
|
```
|
|
263
297
|
|
|
264
|
-
|
|
298
|
+
#### Claude Code (CLI)
|
|
265
299
|
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
"resource_type": "companies",
|
|
269
|
-
"filters": {
|
|
270
|
-
"filters": [
|
|
271
|
-
{
|
|
272
|
-
"attribute": { "slug": "name" },
|
|
273
|
-
"condition": "contains",
|
|
274
|
-
"value": "Tech"
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
"attribute": { "slug": "name" },
|
|
278
|
-
"condition": "contains",
|
|
279
|
-
"value": "AI"
|
|
280
|
-
}
|
|
281
|
-
],
|
|
282
|
-
"matchAny": true
|
|
283
|
-
}
|
|
284
|
-
}
|
|
300
|
+
```bash
|
|
301
|
+
curl -fsSL https://raw.githubusercontent.com/kesslerio/attio-mcp-server/main/scripts/install-claude-code.sh | bash
|
|
285
302
|
```
|
|
286
303
|
|
|
287
|
-
|
|
304
|
+
These scripts will:
|
|
288
305
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
| `ends_with` | Suffix searches | Companies ending with "Inc" |
|
|
295
|
-
| `greater_than` | Numerical analysis | Companies with 100+ employees |
|
|
296
|
-
| `less_than` | Size filtering | Startups under 50 people |
|
|
297
|
-
| `is_empty` | Data cleanup | Find records missing key information |
|
|
298
|
-
| `is_not_empty` | Completeness checks | Records with populated fields |
|
|
306
|
+
- Install `attio-mcp` npm package globally (if needed)
|
|
307
|
+
- Backup existing configuration files
|
|
308
|
+
- Prompt for your Attio API key
|
|
309
|
+
- Configure the MCP server for your client
|
|
310
|
+
- Print next steps and restart instructions
|
|
299
311
|
|
|
300
|
-
|
|
312
|
+
---
|
|
301
313
|
|
|
302
|
-
|
|
314
|
+
### Tier 3: Manual Configuration
|
|
303
315
|
|
|
304
|
-
|
|
305
|
-
- **People**: `full_name`, `job_title`, `email`, `company`
|
|
316
|
+
> **Best for**: Power users who prefer full control or use unsupported clients.
|
|
306
317
|
|
|
307
|
-
|
|
318
|
+
<details>
|
|
319
|
+
<summary><strong>Claude Desktop Manual Setup</strong></summary>
|
|
308
320
|
|
|
309
|
-
|
|
310
|
-
- **Segmentation**: `industry`, `company_size`, `location`, `engagement_score`
|
|
321
|
+
#### Step 1: Install attio-mcp
|
|
311
322
|
|
|
312
|
-
|
|
323
|
+
```bash
|
|
324
|
+
npm install -g attio-mcp
|
|
325
|
+
```
|
|
313
326
|
|
|
314
|
-
|
|
315
|
-
- **Risk indicators**: `last_contact`, `satisfaction_score`, `contract_value`
|
|
327
|
+
#### Step 2: Find your config file
|
|
316
328
|
|
|
317
|
-
|
|
329
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
330
|
+
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
331
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
318
332
|
|
|
319
|
-
|
|
333
|
+
#### Step 3: Add configuration
|
|
320
334
|
|
|
321
335
|
```json
|
|
322
336
|
{
|
|
323
|
-
"
|
|
324
|
-
"
|
|
337
|
+
"mcpServers": {
|
|
338
|
+
"attio-mcp": {
|
|
339
|
+
"command": "attio-mcp",
|
|
340
|
+
"env": {
|
|
341
|
+
"ATTIO_API_KEY": "your_api_key_here"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
325
344
|
}
|
|
326
345
|
}
|
|
327
346
|
```
|
|
328
347
|
|
|
329
|
-
|
|
348
|
+
#### Step 4: Restart Claude Desktop completely (quit and reopen)
|
|
349
|
+
|
|
350
|
+
</details>
|
|
351
|
+
|
|
352
|
+
<details>
|
|
353
|
+
<summary><strong>Cursor IDE Manual Setup</strong></summary>
|
|
354
|
+
|
|
355
|
+
#### Step 1: Install attio-mcp
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
npm install -g attio-mcp
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
#### Step 2: Edit config file
|
|
362
|
+
|
|
363
|
+
Location: `~/.cursor/mcp.json`
|
|
330
364
|
|
|
331
365
|
```json
|
|
332
366
|
{
|
|
333
|
-
"
|
|
334
|
-
"
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
"
|
|
338
|
-
"value": "Test"
|
|
367
|
+
"mcpServers": {
|
|
368
|
+
"attio-mcp": {
|
|
369
|
+
"command": "attio-mcp",
|
|
370
|
+
"env": {
|
|
371
|
+
"ATTIO_API_KEY": "your_api_key_here"
|
|
339
372
|
}
|
|
340
|
-
|
|
373
|
+
}
|
|
341
374
|
}
|
|
342
375
|
}
|
|
343
376
|
```
|
|
344
377
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
**Getting "Filters must include a 'filters' array property"?**
|
|
378
|
+
#### Step 3: Restart Cursor
|
|
348
379
|
|
|
349
|
-
|
|
350
|
-
2. ✅ Each array item needs `attribute`, `condition`, and `value`
|
|
351
|
-
3. ✅ The `attribute` must be an object with a `slug` property
|
|
352
|
-
4. ✅ Double-check your JSON structure matches the examples above
|
|
380
|
+
</details>
|
|
353
381
|
|
|
354
|
-
|
|
382
|
+
<details>
|
|
383
|
+
<summary><strong>Claude Code (CLI) Manual Setup</strong></summary>
|
|
355
384
|
|
|
356
|
-
|
|
385
|
+
#### Option A: Using Claude CLI command (recommended)
|
|
357
386
|
|
|
358
|
-
|
|
387
|
+
```bash
|
|
388
|
+
echo '{"command":"attio-mcp","env":{"ATTIO_API_KEY":"your_key_here"}}' | claude mcp add-json attio-mcp --stdin -s user
|
|
389
|
+
```
|
|
359
390
|
|
|
360
|
-
|
|
391
|
+
#### Option B: Manual config edit
|
|
361
392
|
|
|
362
|
-
|
|
363
|
-
- **Build Compilation Errors**: Created missing enhanced-validation module and resolved TypeScript compilation
|
|
364
|
-
- **E2E Test Implementation**: Fixed JSON truncation, resource mappings, and email validation consistency
|
|
365
|
-
- **Field Parameter Filtering**: Resolved tasks attribute handling with special case for missing `/objects/tasks/attributes` endpoint
|
|
366
|
-
- **Email Validation Consistency**: Fixed batch validation and create/update operation alignment
|
|
367
|
-
- **Pagination System**: Documented tasks pagination limitation with in-memory handling workaround
|
|
393
|
+
Edit `~/.claude/settings.json`:
|
|
368
394
|
|
|
369
|
-
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"mcpServers": {
|
|
398
|
+
"attio-mcp": {
|
|
399
|
+
"command": "attio-mcp",
|
|
400
|
+
"env": {
|
|
401
|
+
"ATTIO_API_KEY": "your_api_key_here"
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
```
|
|
370
407
|
|
|
371
|
-
|
|
372
|
-
- **Build Status**: All TypeScript compilation successful
|
|
373
|
-
- **API Contract**: All violations resolved with robust error handling
|
|
408
|
+
</details>
|
|
374
409
|
|
|
375
|
-
|
|
410
|
+
<details>
|
|
411
|
+
<summary><strong>Building from Source</strong></summary>
|
|
376
412
|
|
|
377
|
-
|
|
413
|
+
For development or custom deployments:
|
|
378
414
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
### Installing via Smithery (Recommended)
|
|
415
|
+
```bash
|
|
416
|
+
git clone https://github.com/kesslerio/attio-mcp-server.git
|
|
417
|
+
cd attio-mcp-server
|
|
418
|
+
npm install
|
|
419
|
+
npm run build
|
|
420
|
+
```
|
|
386
421
|
|
|
387
|
-
|
|
422
|
+
Run directly:
|
|
388
423
|
|
|
389
424
|
```bash
|
|
390
|
-
|
|
425
|
+
ATTIO_API_KEY=your_key node dist/index.js
|
|
391
426
|
```
|
|
392
427
|
|
|
393
|
-
|
|
428
|
+
</details>
|
|
429
|
+
|
|
430
|
+
<details>
|
|
431
|
+
<summary><strong>NPM Global Install</strong></summary>
|
|
394
432
|
|
|
395
433
|
```bash
|
|
396
434
|
# Global installation for CLI usage
|
|
@@ -400,21 +438,136 @@ npm install -g attio-mcp
|
|
|
400
438
|
npm install attio-mcp
|
|
401
439
|
```
|
|
402
440
|
|
|
403
|
-
|
|
441
|
+
</details>
|
|
404
442
|
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
### Tier 4: Cloudflare Worker (Remote Deployment)
|
|
446
|
+
|
|
447
|
+
> **Best for**: Teams needing centralized OAuth, multi-user access, mobile access, or running MCP without local installation.
|
|
448
|
+
|
|
449
|
+
Deploy your own Attio MCP server on Cloudflare Workers with full OAuth 2.1 support.
|
|
450
|
+
|
|
451
|
+
**Mobile Access**: With a remote MCP server, you can use Attio tools from:
|
|
452
|
+
|
|
453
|
+
- ChatGPT mobile app (iOS/Android)
|
|
454
|
+
- Claude mobile app (iOS/Android)
|
|
455
|
+
- Any browser on any device
|
|
408
456
|
|
|
409
|
-
|
|
457
|
+
#### Smithery vs. Cloudflare Worker
|
|
458
|
+
|
|
459
|
+
| Feature | Smithery | Cloudflare Worker |
|
|
460
|
+
| ----------------- | --------- | ----------------- |
|
|
461
|
+
| Setup complexity | Very Low | Medium |
|
|
462
|
+
| OAuth built-in | ✅ | ✅ |
|
|
463
|
+
| Mobile app access | ✅ | ✅ |
|
|
464
|
+
| Multi-user access | ❌ | ✅ |
|
|
465
|
+
| Custom domain | ❌ | ✅ |
|
|
466
|
+
| Self-hosted | ❌ | ✅ |
|
|
467
|
+
| Team deployments | Limited | ✅ Full |
|
|
468
|
+
| Cost | Free tier | Free tier |
|
|
469
|
+
|
|
470
|
+
#### Quick Deploy
|
|
410
471
|
|
|
411
472
|
```bash
|
|
412
|
-
|
|
413
|
-
cd attio-mcp-server
|
|
473
|
+
cd examples/cloudflare-mcp-server
|
|
414
474
|
npm install
|
|
415
|
-
|
|
475
|
+
wrangler kv:namespace create "TOKEN_STORE"
|
|
476
|
+
# Update wrangler.toml with the KV namespace ID
|
|
477
|
+
wrangler secret put ATTIO_CLIENT_ID
|
|
478
|
+
wrangler secret put ATTIO_CLIENT_SECRET
|
|
479
|
+
wrangler secret put TOKEN_ENCRYPTION_KEY
|
|
480
|
+
wrangler deploy
|
|
416
481
|
```
|
|
417
482
|
|
|
483
|
+
#### Client Configuration
|
|
484
|
+
|
|
485
|
+
After deployment, configure your client with your Worker URL:
|
|
486
|
+
|
|
487
|
+
- **Claude.ai**: Settings → Connectors → Add your Worker URL
|
|
488
|
+
- **ChatGPT**: Settings → Connectors → Developer Mode → Add Worker URL
|
|
489
|
+
|
|
490
|
+
See [Cloudflare Worker Deployment Guide](./examples/cloudflare-mcp-server/README.md) for:
|
|
491
|
+
|
|
492
|
+
- Complete OAuth 2.1 setup with Attio
|
|
493
|
+
- Token encryption configuration
|
|
494
|
+
- Production deployment checklist
|
|
495
|
+
- Troubleshooting guide
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## 🆕 What's New in v1.4.0
|
|
500
|
+
|
|
501
|
+
### Major Features
|
|
502
|
+
|
|
503
|
+
- **🎯 Workspace Schema Skill Generator** (#983) - Auto-generate Claude Skills from your Attio workspace schema for error-free field names and options
|
|
504
|
+
- **🔍 Select-field Transformer** (#1019) - Case-insensitive matching, partial matching, and UUID pass-through for select/status fields
|
|
505
|
+
- **🛠️ Attio Skill Generator Meta-skill** (#1020) - Meta-skill for automatic workspace documentation
|
|
506
|
+
- **📚 Universal Usage Guide Skill** (#1018) - Hand-crafted workflow patterns and error prevention
|
|
507
|
+
- **⚙️ `get_record_attribute_options` tool** (#975) - Get valid options for select/status fields with enhanced error messages
|
|
508
|
+
- **📞 Phone validation** (#951) - Built-in phone number validation support
|
|
509
|
+
- **⏱️ Configurable option fetch delay** - Rate limiting control via `--option-fetch-delay` flag
|
|
510
|
+
|
|
511
|
+
### Major Enhancements
|
|
512
|
+
|
|
513
|
+
- **🏷️ MCP-compliant tool naming** (#1039) - All tools now use `snake_case`, verb-first naming (old names work via aliases until v2.0.0)
|
|
514
|
+
- **🎨 Custom object display names** (#1017) - Fetch display names directly from Attio API
|
|
515
|
+
- **📖 Split integration patterns** (#1023) - Progressive discovery patterns by use case
|
|
516
|
+
- **💡 Enhanced attribute error messages** (#975) - Levenshtein distance suggestions for typos
|
|
517
|
+
|
|
518
|
+
### Critical Fixes
|
|
519
|
+
|
|
520
|
+
- 📝 Note content line breaks preserved (#1052)
|
|
521
|
+
- 👤 People search "Unnamed" display fixed (#1051)
|
|
522
|
+
- ✅ Select field persistence (#1045)
|
|
523
|
+
- 🔗 Record-reference auto-transformation (#997)
|
|
524
|
+
- 📊 Multi-select array auto-transformation (#992)
|
|
525
|
+
- 🛡️ Complex attribute validation (#991)
|
|
526
|
+
- ⚠️ Field persistence false warnings (#995)
|
|
527
|
+
- 📦 SDK dependency pinning (#1025)
|
|
528
|
+
- 💼 Deal stage/UTM validation (#1043)
|
|
529
|
+
- 📍 Location field auto-normalization (#987)
|
|
530
|
+
|
|
531
|
+
### Internal Improvements
|
|
532
|
+
|
|
533
|
+
- Tool alias system refactoring (#1041) - Type-safe constants with pattern-based generation
|
|
534
|
+
- Strategy Pattern for CRUD error handlers (#1001)
|
|
535
|
+
- Consolidated metadata fetching (#984)
|
|
536
|
+
- UniversalUpdateService modularization (#984)
|
|
537
|
+
- Select transformation type rename (#1055) - `select_title_to_array` for clarity
|
|
538
|
+
|
|
539
|
+
## 🔄 Migration Guide
|
|
540
|
+
|
|
541
|
+
**Upgrading from v1.3.x or earlier?** Tool names have changed to follow MCP naming conventions.
|
|
542
|
+
|
|
543
|
+
**Old names still work** via backward-compatible aliases, but will be removed in **v2.0.0 (Q1 2026)**.
|
|
544
|
+
|
|
545
|
+
### Tool Name Changes
|
|
546
|
+
|
|
547
|
+
| Old Name (Deprecated) | New Name (MCP-compliant) | Notes |
|
|
548
|
+
| -------------------------------- | -------------------------------- | ------------------ |
|
|
549
|
+
| `records_search` | `search_records` | Verb-first pattern |
|
|
550
|
+
| `records_get_details` | `get_record_details` | Verb-first pattern |
|
|
551
|
+
| `records_get_attributes` | `get_record_attributes` | Verb-first pattern |
|
|
552
|
+
| `records_discover_attributes` | `discover_record_attributes` | Verb-first pattern |
|
|
553
|
+
| `records_search_advanced` | `search_records_advanced` | Verb-first pattern |
|
|
554
|
+
| `records_search_by_relationship` | `search_records_by_relationship` | Verb-first pattern |
|
|
555
|
+
| `records_search_by_content` | `search_records_by_content` | Verb-first pattern |
|
|
556
|
+
| `records_search_by_timeframe` | `search_records_by_timeframe` | Verb-first pattern |
|
|
557
|
+
| `records_batch` | `batch_records` | Verb-first pattern |
|
|
558
|
+
| `search-records` | `search_records` | snake_case format |
|
|
559
|
+
| `get-record-details` | `get_record_details` | snake_case format |
|
|
560
|
+
| `create-record` | `create_record` | snake_case format |
|
|
561
|
+
| `update-record` | `update_record` | snake_case format |
|
|
562
|
+
| `delete-record` | `delete_record` | snake_case format |
|
|
563
|
+
| `create-note` | `create_note` | snake_case format |
|
|
564
|
+
| `list-notes` | `list_notes` | snake_case format |
|
|
565
|
+
| `smithery-debug-config` | `smithery_debug_config` | snake_case format |
|
|
566
|
+
|
|
567
|
+
**Action Required:** Update your integrations to use new tool names before Q1 2026. See [MIGRATION-GUIDE.md](docs/MIGRATION-GUIDE.md) for the complete migration table.
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
418
571
|
## ⚡ Quick Start
|
|
419
572
|
|
|
420
573
|
### Prerequisites
|
|
@@ -681,87 +834,14 @@ See [docs/deployment/smithery-cli-setup.md](./docs/deployment/smithery-cli-setup
|
|
|
681
834
|
|
|
682
835
|
### **Testing**
|
|
683
836
|
|
|
684
|
-
The project includes comprehensive testing at multiple levels with **100% E2E test pass rate**:
|
|
685
|
-
|
|
686
|
-
#### **🚀 E2E Test Framework (100% Pass Rate)**
|
|
687
|
-
|
|
688
|
-
Our comprehensive E2E test framework validates all universal tools with real Attio API integration:
|
|
689
|
-
|
|
690
837
|
```bash
|
|
691
|
-
# E2E Tests (requires ATTIO_API_KEY in .env file)
|
|
692
|
-
npm run e2e # Run complete E2E test suite (51 tests, 100% pass rate)
|
|
693
|
-
npm test -- test/e2e/suites/universal-tools.e2e.test.ts # Universal tools E2E tests
|
|
694
|
-
|
|
695
|
-
# Set up E2E environment
|
|
696
|
-
echo "ATTIO_API_KEY=your_api_key_here" > .env
|
|
697
|
-
npm run e2e # Should show 51/51 tests passing
|
|
698
|
-
```
|
|
699
|
-
|
|
700
|
-
**✅ Comprehensive Coverage:**
|
|
701
|
-
|
|
702
|
-
- **Pagination Testing**: Validates `offset` parameter across all universal tools
|
|
703
|
-
- **Field Filtering**: Tests `fields` parameter for selective data retrieval
|
|
704
|
-
- **Tasks Integration**: Complete lifecycle testing for tasks resource type
|
|
705
|
-
- **Cross-Resource Validation**: Ensures consistent behavior across companies, people, lists, tasks
|
|
706
|
-
- **Error Handling**: Validates graceful error responses and edge cases
|
|
707
|
-
- **Performance Monitoring**: Tracks execution times and API response sizes
|
|
708
|
-
|
|
709
|
-
**🛠️ Enhanced Assertions (7 New Methods):**
|
|
710
|
-
|
|
711
|
-
```typescript
|
|
712
|
-
// Available in test/e2e/utils/assertions.ts
|
|
713
|
-
expectValidPagination(result, params); // Validates pagination behavior
|
|
714
|
-
expectFieldFiltering(result, fields); // Validates field selection
|
|
715
|
-
expectValidTasksIntegration(result); // Tasks-specific validation
|
|
716
|
-
expectSpecificError(result, errorType); // Typed error validation
|
|
717
|
-
expectOptimalPerformance(result, budget); // Performance validation
|
|
718
|
-
expectValidUniversalToolParams(params); // Parameter validation
|
|
719
|
-
expectValidBatchOperation(result, records); // Batch operation validation
|
|
720
|
-
```
|
|
721
|
-
|
|
722
|
-
**📊 Performance Benchmarks:**
|
|
723
|
-
|
|
724
|
-
- **Search Operations**: < 1000ms per API call
|
|
725
|
-
- **CRUD Operations**: < 1500ms per operation
|
|
726
|
-
- **Batch Operations**: < 3000ms for 10 records
|
|
727
|
-
- **Field Filtering**: < 500ms additional overhead
|
|
728
|
-
- **Pagination**: < 200ms additional per offset
|
|
729
|
-
|
|
730
|
-
#### **Unit & Integration Tests**
|
|
731
|
-
|
|
732
|
-
```bash
|
|
733
|
-
# Unit Tests (no API required)
|
|
734
838
|
npm test # Run all tests
|
|
735
|
-
npm run test:offline # Run only offline tests (
|
|
736
|
-
npm run test:
|
|
737
|
-
|
|
738
|
-
# Integration Tests (requires API key and test data)
|
|
739
|
-
npm run test:integration # Run all integration tests (15 tests, 100% pass rate)
|
|
740
|
-
npm run setup:test-data # Create test data in your workspace
|
|
741
|
-
```
|
|
742
|
-
|
|
743
|
-
#### **Test Environment Setup**
|
|
744
|
-
|
|
745
|
-
For E2E and integration tests, you need:
|
|
746
|
-
|
|
747
|
-
1. **Create `.env` file** in project root:
|
|
748
|
-
|
|
749
|
-
```bash
|
|
750
|
-
# Required for E2E/Integration tests
|
|
751
|
-
ATTIO_API_KEY=your_64_character_api_key_here
|
|
752
|
-
PORT=3000
|
|
753
|
-
LOG_LEVEL=debug
|
|
754
|
-
NODE_ENV=development
|
|
755
|
-
```
|
|
756
|
-
|
|
757
|
-
2. **Verify API key** format (must be exactly 64 characters)
|
|
758
|
-
3. **Run tests** to validate setup:
|
|
759
|
-
|
|
760
|
-
```bash
|
|
761
|
-
npm run build && npm run test:integration
|
|
839
|
+
npm run test:offline # Run only offline tests (no API required)
|
|
840
|
+
npm run test:integration # Integration tests (requires ATTIO_API_KEY)
|
|
841
|
+
npm run e2e # E2E tests (requires ATTIO_API_KEY)
|
|
762
842
|
```
|
|
763
843
|
|
|
764
|
-
See the [Testing Guide](./docs/testing.md)
|
|
844
|
+
For E2E/integration tests, create `.env` with your `ATTIO_API_KEY`. See the [Testing Guide](./docs/testing.md) for detailed setup.
|
|
765
845
|
|
|
766
846
|
### **Available Scripts**
|
|
767
847
|
|