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/CHANGELOG.md
CHANGED
|
@@ -7,18 +7,278 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
## [1.4.0] - 2025-12-29
|
|
11
|
+
|
|
12
|
+
**TL;DR for Users**: New workspace skill generator, better select field handling, MCP-compliant tool naming. **No action needed** - old tool names still work via backward-compatible aliases until v2.0.0 (Q1 2026). See [Migration Guide](./docs/MIGRATION-GUIDE.md) for future planning.
|
|
11
13
|
|
|
12
14
|
### Added
|
|
13
15
|
|
|
16
|
+
- **Workspace Schema Skill Generator** (#983) - Auto-generate Claude Skills from Attio workspace schemas
|
|
17
|
+
- New CLI command `attio-discover generate-skill` for generating workspace schema documentation
|
|
18
|
+
- Supports companies, people, and deals (Phase 1 objects) with experimental support for custom objects
|
|
19
|
+
- Three output formats: Claude Skill (SKILL.md + resources/), Markdown (single file), and JSON
|
|
20
|
+
- Prominent Display Name ↔ API Slug mapping tables to address #1 LLM error source
|
|
21
|
+
- Select/status option values with 20-item truncation and "(+N more)" indicators
|
|
22
|
+
- Complex type structure documentation (location, personal-name, phone-number, email-address)
|
|
23
|
+
- Multi-select, unique, and required field indicators for accurate attribute usage
|
|
24
|
+
- ZIP packaging support (--zip flag) for easy Claude desktop upload
|
|
25
|
+
- Graceful error handling with partial data generation when individual objects fail
|
|
26
|
+
- Handlebars-based templating for clean separation of logic and presentation
|
|
27
|
+
- Security validation prevents directory traversal attacks
|
|
28
|
+
- Comprehensive unit tests for all services (45 tests total)
|
|
29
|
+
|
|
30
|
+
- **Universal Usage Guide Skill** (#1018) - Hand-crafted skill for workflow patterns and error prevention
|
|
31
|
+
- Universal workflow patterns (Find or Create, Batch Update, Pipeline Movement, Data Enrichment)
|
|
32
|
+
- Golden Rules error prevention system (read-only fields, multi-select arrays, data types, UUID validation)
|
|
33
|
+
- Complete MCP tool reference with signatures and examples for all tools
|
|
34
|
+
- Integration patterns for deals pipeline, list-based organization, lead qualification, bulk import
|
|
35
|
+
- Object-agnostic design supporting companies, deals, people, lists, and custom objects
|
|
36
|
+
- Cross-references to attio-workspace-schema skill for workspace-specific details
|
|
37
|
+
- Two-skill architecture: Schema skill (WHAT) + Usage skill (HOW)
|
|
38
|
+
|
|
39
|
+
- **Select-field Transformer** (#1019, #1029) - Quality-of-life enhancement for select field values
|
|
40
|
+
- Case-insensitive title matching: `"potential customer"` → `"Potential Customer"`
|
|
41
|
+
- Partial matching support: `"Potential"` → `"Potential Customer"`
|
|
42
|
+
- Better error messages listing valid options with suggestions
|
|
43
|
+
- UUID pass-through support (no API lookup needed)
|
|
44
|
+
- 5-minute TTL caching to minimize API calls
|
|
45
|
+
- Consistent UX with existing status-transformer
|
|
46
|
+
|
|
47
|
+
- **`records_get_attribute_options` tool** (#975) - Get valid options for select, status, and multi-select attributes
|
|
48
|
+
- Prevents "Cannot find select option" errors by showing available options upfront
|
|
49
|
+
- Works with companies, people, deals, and custom objects
|
|
50
|
+
- Returns option titles, IDs, and active/archived status
|
|
51
|
+
|
|
52
|
+
- **Comprehensive FieldPersistenceHandler tests** (#984) - 50 new unit tests
|
|
53
|
+
- Optional actualRecord parameter behavior (10 tests)
|
|
54
|
+
- Verification modes: disabled, warn-only, strict (15 tests)
|
|
55
|
+
- Semantic vs cosmetic mismatch filtering (15 tests)
|
|
56
|
+
- Integration with UpdateValidation (10 tests)
|
|
57
|
+
- Increases total test count from 2973 to 3026 (+53 tests)
|
|
58
|
+
|
|
59
|
+
- **Configurable skill generator option fetch delay** (#1015, #1024) - New `--option-fetch-delay` flag to tune rate limiting between option fetches
|
|
60
|
+
|
|
61
|
+
- **Attio skill generator meta-skill** (#1020, #1024) - Meta-skill for generating workspace schema documentation
|
|
62
|
+
|
|
63
|
+
- **Phone validation to @attio-mcp/core** (#951, #964) - Extracted phone number validation into dedicated package
|
|
64
|
+
- New `@attio-mcp/core` package with phone validation utilities
|
|
65
|
+
- E.164 format support with international dialing code parsing
|
|
66
|
+
- Reusable validation logic for phone number attributes across the codebase
|
|
67
|
+
|
|
14
68
|
### Changed
|
|
15
69
|
|
|
70
|
+
- **Extract search services from UniversalSearchService** (#935, #974) - Improved search architecture and maintainability
|
|
71
|
+
- Created dedicated strategy classes: CompanySearchStrategy, PeopleSearchStrategy, NoteSearchStrategy, TaskSearchStrategy
|
|
72
|
+
- Extracted common search patterns into BaseSearchStrategy abstract class
|
|
73
|
+
- Reduced code duplication and improved testability
|
|
74
|
+
- Better separation of concerns for resource-specific search logic
|
|
75
|
+
|
|
76
|
+
- **Transformation type rename** (#1055) - Renamed transformation type for clarity
|
|
77
|
+
- Renamed `select_title_to_id` to `select_title_to_array` to better reflect array-based format
|
|
78
|
+
- Maintains consistency with Attio API's array-based select field expectations
|
|
79
|
+
|
|
80
|
+
- **Tool alias system refactoring** (#1041) - Simplified and improved maintainability of the tool alias system
|
|
81
|
+
- Created `src/constants/tool-names.ts` with type-safe tool name constants and `ToolName` type
|
|
82
|
+
- Refactored `src/config/tool-aliases.ts` to use data-driven pattern-based alias generation
|
|
83
|
+
- Created `test/utils/tool-assertions.ts` with reusable assertion helpers for tool validation
|
|
84
|
+
- Refactored consistency tests to use assertion helpers, improving readability and reducing duplication
|
|
85
|
+
- All 29 aliases remain fully functional with 100% backward compatibility
|
|
86
|
+
|
|
87
|
+
- **MCP-compliant tool naming** (#1039) - All universal tools now use `snake_case`, verb-first naming
|
|
88
|
+
- Universal search/metadata tools: `records_search` → `search_records`, `records_get_details` → `get_record_details`, etc. (12 tools)
|
|
89
|
+
- CRUD tools: `create-record` → `create_record`, `update-record` → `update_record`, `delete-record` → `delete_record`
|
|
90
|
+
- Note tools: `create-note` → `create_note`, `list-notes` → `list_notes`
|
|
91
|
+
- Debug tool: `smithery-debug-config` → `smithery_debug_config`
|
|
92
|
+
- Tool descriptions now use natural language sentences instead of pipe-separated labels
|
|
93
|
+
- Aligns with MCP ecosystem standards (Desktop Commander, SEP-986, official MCP docs)
|
|
94
|
+
- Old names continue to work via dual alias support (both old `noun_verb` and `kebab-case` formats)
|
|
95
|
+
- See `docs/MIGRATION-GUIDE.md` for complete migration table
|
|
96
|
+
|
|
97
|
+
- **Refactored UniversalUpdateService** (#984) - Reduced from 831 to 691 lines (-17%) by extracting focused modules
|
|
98
|
+
- Created MetadataResolver for centralized metadata fetching (eliminates 40-60% duplicate API calls)
|
|
99
|
+
- Created UpdateOrchestrator for clean strategy dispatch separation
|
|
100
|
+
- Created FieldValidationHandler for validation with display name resolution
|
|
101
|
+
- Created FieldPersistenceHandler for post-update verification
|
|
102
|
+
|
|
103
|
+
- **Unified verification API** (#984) - Single entry point for field persistence verification
|
|
104
|
+
- UniversalUpdateService now routes through FieldPersistenceHandler.verifyPersistence
|
|
105
|
+
- Eliminates duplicate semantic filtering logic (47 lines removed)
|
|
106
|
+
- FieldPersistenceHandler.verifyPersistence now accepts optional actualRecord parameter
|
|
107
|
+
- Verification results surfaced in UpdateMetadata.fieldVerification (verified status + discrepancies)
|
|
108
|
+
- Renamed ValidationResult → UpdateMetadata for clarity (3 competing interfaces reduced to distinct purposes)
|
|
109
|
+
|
|
110
|
+
- **Standardized environment variables** (#984) - Consistent verification configuration
|
|
111
|
+
- UpdateValidation now uses ENABLE_FIELD_VERIFICATION (deprecated SKIP_FIELD_VERIFICATION)
|
|
112
|
+
- Both variables supported for backward compatibility with deprecation notice
|
|
113
|
+
|
|
114
|
+
- **Improved MetadataResolver error handling** (#984, #1006) - Better error handling for critical failures
|
|
115
|
+
- Re-throws critical authentication errors (401, 403, Unauthorized, Forbidden)
|
|
116
|
+
- Re-throws schema validation errors for immediate failure visibility
|
|
117
|
+
- Graceful degradation with empty metadata for non-critical transient errors
|
|
118
|
+
- Prevents silent masking of authentication and validation failures
|
|
119
|
+
|
|
120
|
+
- **Consolidated metadata fetching** (#984, #1006) - Single API call per resource type per request
|
|
121
|
+
- MetadataResolver provides single source of truth for attribute metadata
|
|
122
|
+
- Value transformer receives metadata via context to avoid duplicate fetch
|
|
123
|
+
- Reduces API calls and improves performance
|
|
124
|
+
|
|
125
|
+
- **Extended display name resolution** (#984) - User-friendly field names now work in create/update operations
|
|
126
|
+
- Can use "Deal stage" instead of "stage" in all operations (not just attribute_options)
|
|
127
|
+
- FieldValidationHandler automatically resolves display names before validation
|
|
128
|
+
- Integrated into both UniversalCreateService and UniversalUpdateService
|
|
129
|
+
|
|
130
|
+
- **Added TTL to metadata caches** (#984) - All metadata caches now expire after 5 minutes
|
|
131
|
+
- Value transformer migrated to CachingService with DEFAULT_ATTRIBUTES_CACHE_TTL
|
|
132
|
+
- Status transformer uses timestamp-based expiration with lazy eviction
|
|
133
|
+
- Prevents stale data while maintaining performance benefits
|
|
134
|
+
|
|
135
|
+
- **Enhanced attribute error messages** (#975) - Better guidance when API requests fail
|
|
136
|
+
- Levenshtein distance suggestions for misspelled attribute names (threshold ≤3 edits)
|
|
137
|
+
- Field alias mapping converts common mistakes automatically (`linkedin_url` → `linkedin`)
|
|
138
|
+
- Select/status errors now show valid workspace-specific options
|
|
139
|
+
- Error messages include `records_discover_attributes` hint for discovery
|
|
140
|
+
|
|
141
|
+
- **Expanded valid field lists** (#975) - Validators now accept more standard Attio attributes
|
|
142
|
+
- Companies: `team_size`, `founded_at`, `headquarters`, `crunchbase`, `instagram`, `angellist`, etc.
|
|
143
|
+
- People: `primary_email_address`, `primary_phone_number`, `avatar_url`, `timezone`, `instagram`, etc.
|
|
144
|
+
|
|
145
|
+
- **Location field auto-normalization** (#987) - Incomplete location objects now auto-fill missing fields
|
|
146
|
+
- Attio requires all 10 location fields (`line_1`-`line_4`, `locality`, `region`, `postcode`, `country_code`, `latitude`, `longitude`) even if null
|
|
147
|
+
- Transformer auto-fills missing fields with `null` to prevent validation errors
|
|
148
|
+
- Common aliases supported: `street`→`line_1`, `city`→`locality`, `state`→`region`, `zip`→`postcode`, `lat`→`latitude`
|
|
149
|
+
|
|
150
|
+
- **Refactored select array handling** (#1030) - Normalized select array data structures for consistency
|
|
151
|
+
|
|
152
|
+
- **Removed unused normalizeLocation function** (#1030) - Cleaned up unused code to reduce technical debt
|
|
153
|
+
|
|
154
|
+
- **Error handling refactoring** (#1001) - Extracted validation enhancers for improved code organization and maintainability
|
|
155
|
+
- Extracted required-fields enhancer (Step 1/6)
|
|
156
|
+
- Extracted uniqueness enhancer (Step 2/6)
|
|
157
|
+
- Extracted attribute-not-found enhancer (Step 3/6)
|
|
158
|
+
- Extracted final 3 enhancers (Steps 4-6/6)
|
|
159
|
+
|
|
16
160
|
### Fixed
|
|
17
161
|
|
|
18
|
-
|
|
162
|
+
- **Note content line breaks preserved** (#1052) - Fixed line breaks being stripped from note content during sanitization
|
|
163
|
+
- Preserved leading indentation for nested Markdown (bullet lists, code blocks)
|
|
164
|
+
- Added `sanitizeMultilineString()` for content-heavy fields while maintaining XSS security
|
|
165
|
+
- Supports all multiline fields: content, content_markdown, content_plaintext, description, body, notes
|
|
166
|
+
- Enhanced `create_note` tool description with markdown formatting guidance
|
|
167
|
+
- **Action**: Re-generate workspace schema skills to get updated note formatting documentation
|
|
168
|
+
|
|
169
|
+
- **People search results display** (#1051) - Fixed people search showing "Unnamed" instead of actual names
|
|
170
|
+
- Updated `getAttributeValue()` to handle `personal-name` attributes with `full_name`, `first_name`, `last_name` fields
|
|
171
|
+
- Added fallback support for `formatted` attribute values
|
|
172
|
+
- Maintains backward compatibility with standard `value` attributes
|
|
173
|
+
|
|
174
|
+
- **Select field persistence** (#1045) - Fixed silent API failures where select field updates returned 200 OK but didn't persist
|
|
175
|
+
- Fixed `detectFieldType()` to return `'array'` for all select fields (single and multi-select)
|
|
176
|
+
- Fixed select-transformer to use `["title"]` format instead of `["uuid"]` format (Attio silently rejects UUID arrays)
|
|
177
|
+
- Added E2E test validating real API persistence with select fields
|
|
178
|
+
- Resolves type mismatch validation errors and false-positive update confirmations
|
|
179
|
+
|
|
180
|
+
- **Deal creation** (#1043) - Accept stage titles + UTM fields and improve validation/error surfacing
|
|
181
|
+
|
|
182
|
+
- **Field persistence false warnings for status fields** (#995, #1011) - Resolved spurious warnings when updating status field values
|
|
183
|
+
- Fixed unwrapArrayValue to properly handle both status and title field properties
|
|
184
|
+
- Improved isStatusField detection to recognize stage and status field variations
|
|
185
|
+
- Enhanced test coverage for status field update scenarios
|
|
186
|
+
- Resolves confusing warnings after successful updates (e.g., "Sales Qualified" stage updates)
|
|
187
|
+
|
|
188
|
+
- **Enhance uniqueness constraint violation errors** (#990, #1000) - Better error messages for duplicate records
|
|
189
|
+
- Searches for conflicting records and shows field name, conflicting value, and existing record ID
|
|
190
|
+
- Provides actionable options: update existing, view details, or use different value
|
|
191
|
+
- Integrated into handleCreateError() for companies and people records
|
|
192
|
+
|
|
193
|
+
- **Complex attribute validation** (#991) - Clearer validation and error messages for location, personal-name, and phone-number fields
|
|
194
|
+
- Pre-validates complex types with actionable errors and examples before Attio API calls
|
|
195
|
+
- Auto-fills missing location fields with nulls; enforces phone_number/original_phone_number and non-empty names
|
|
196
|
+
- Enhanced CRUD error handling surfaces Attio validation_errors and select/status option hints
|
|
197
|
+
|
|
198
|
+
- **Record-reference fields now auto-format** (#997) - Automatic transformation to Attio's required format
|
|
199
|
+
- String IDs like `company: "uuid"` are auto-converted to `[{target_object: "companies", target_record_id: "uuid"}]`
|
|
200
|
+
- Fixes 400 errors when linking people to companies or associating people with deals
|
|
201
|
+
- Supports legacy formats: `{record_id: "uuid"}`, `{id: "uuid"}`, incomplete objects
|
|
202
|
+
- Target object inferred from field name (`company`→`companies`, `associated_people`→`people`)
|
|
203
|
+
|
|
204
|
+
- **Multi-select fields now accept single values** (#992) - Automatic array wrapping for multi-select attributes
|
|
205
|
+
- Single values like `lead_type: "Inbound"` are now auto-converted to `["Inbound"]`
|
|
206
|
+
- Works for all custom multi-select fields (e.g., `categories`, `inbound_outbound`, `regions`)
|
|
207
|
+
- Fixes "Multi-select attribute expects an array" errors when using natural input format
|
|
208
|
+
- Detects multi-select via Attio's `is_multiselect` flag (not just type name)
|
|
209
|
+
|
|
210
|
+
- **`records_get_attribute_options` now returns status options** (#987) - Fixed empty results for status attributes
|
|
211
|
+
- Select endpoint returning empty `[]` now falls back to status endpoint
|
|
212
|
+
- `deals.stage` and similar status attributes now return correct options
|
|
213
|
+
- `attributeType` correctly identifies `'status'` vs `'select'` based on successful endpoint
|
|
214
|
+
- Error messages include both select and status error details when both fail
|
|
215
|
+
|
|
216
|
+
- **Company location updates now work correctly** (#987) - Fixed "Expected an object, but got string" error
|
|
217
|
+
- `processFieldValue` now preserves object-type fields (like `primary_location`) instead of converting to `[object Object]`
|
|
218
|
+
- `formatAttributeValue` normalizes location objects with all 10 required Attio fields (nulls where missing)
|
|
219
|
+
- Both company-specific (`updateCompany`) and universal (`update-record`) flows now work
|
|
220
|
+
|
|
221
|
+
- **Claude PR review dynamic import detection** (#1002, #1003) - Ring 1 scope now includes dynamically imported modules
|
|
222
|
+
- Adds regex patterns for dynamic imports (`await import(...)`) in scope generator
|
|
223
|
+
- Captures both relative (`../../path`) and `@/` alias dynamic imports
|
|
224
|
+
- Pre-computes alias paths from full repo and outputs alias-resolutions.json
|
|
225
|
+
- Adds prompt hardening to prevent "missing file" claims from sparse checkout limitations
|
|
226
|
+
- Fixes false positive "missing dependency" errors when PR files use `await import('@/...')` or `await import('./...')`
|
|
227
|
+
|
|
228
|
+
- **PR review workflow path alias detection** (#977) - Fixed false positive "missing file" errors
|
|
229
|
+
- Ring scope generator now detects `@/...` path alias imports (not just relative imports)
|
|
230
|
+
- Resolves `@/services/utils/foo.js` to `src/services/utils/foo.ts` for Ring 1 inclusion
|
|
231
|
+
|
|
232
|
+
- **Daily changelog workflow authentication** (#1005) - Added claude_args with required tool permissions
|
|
233
|
+
- Explicitly permits Read, Edit, Write for file operations
|
|
234
|
+
- Allows Bash(git:\*) for branch/commit/push operations
|
|
235
|
+
- Allows Bash(gh pr list:_), Bash(gh pr create:_) for PR operations
|
|
236
|
+
- Allows Bash(date:\*) for branch naming
|
|
237
|
+
- Ensures gh CLI has authentication inside Claude's Bash environment
|
|
238
|
+
|
|
239
|
+
- **SDK dependency pinning** (#1025, #1026) - Pinned @modelcontextprotocol/sdk to ~1.24.0 to ensure stability
|
|
19
240
|
|
|
20
241
|
### Deprecated
|
|
21
242
|
|
|
243
|
+
- **Old universal tool names** (#1039) - Removal: v2.0.0 (Q1 2026)
|
|
244
|
+
- Old noun-verb snake_case format (e.g., `records_search`, `records_get_details`)
|
|
245
|
+
- Old kebab-case format (e.g., `create-record`, `update-record`, `create-note`)
|
|
246
|
+
- Use new verb-first snake_case names (e.g., `search_records`, `create_record`, `create_note`)
|
|
247
|
+
- Dual aliases provide backward compatibility with deprecation warnings
|
|
248
|
+
- Migration guide available in `docs/MIGRATION-GUIDE.md`
|
|
249
|
+
|
|
250
|
+
- **Legacy resource-specific tools** (#1022) - Removal: v2.0.0 (Q1 2026)
|
|
251
|
+
- All resource-specific tools (`search-companies`, `create-person`, etc.) are deprecated
|
|
252
|
+
- Use universal tools instead (`search_records`, `create_record`, etc.)
|
|
253
|
+
- Legacy tools accessible via `DISABLE_UNIVERSAL_TOOLS=true` but emit deprecation warnings
|
|
254
|
+
- See `docs/MIGRATION-GUIDE.md` for migration guide
|
|
255
|
+
|
|
256
|
+
## [1.3.6] - 2025-12-03
|
|
257
|
+
|
|
258
|
+
Documentation and testing infrastructure improvements for remote deployment support.
|
|
259
|
+
|
|
260
|
+
### Added
|
|
261
|
+
|
|
262
|
+
- **Install Script Test Suite** (#958) - Automated testing for bash install scripts
|
|
263
|
+
- Tests for `install-claude-desktop.sh`, `install-cursor.sh`, `install-claude-code.sh`
|
|
264
|
+
- Validates API key sanitization, config merging, prerequisite checks
|
|
265
|
+
- Security tests for command injection prevention
|
|
266
|
+
- Uses Vitest + Node.js child_process for bash function testing
|
|
267
|
+
|
|
268
|
+
- **E2E Remote Mode Troubleshooting Guide** (#958) - Remote-specific debugging documentation
|
|
269
|
+
- Smithery deployment troubleshooting (scanner, OAuth, session issues)
|
|
270
|
+
- Cloudflare Worker debugging (Error 1042, KV namespace, token encryption)
|
|
271
|
+
- Network debugging tools and commands (`wrangler tail`, curl examples)
|
|
272
|
+
- Local vs remote comparison table for common issues
|
|
273
|
+
|
|
274
|
+
### Changed
|
|
275
|
+
|
|
276
|
+
- **Remote Deployment Production Checklist** (#958) - Expanded from 12 to 28+ items
|
|
277
|
+
- Added Cloudflare Worker-specific checklist with validation commands
|
|
278
|
+
- Added Smithery-specific validation steps
|
|
279
|
+
- Added rollback procedures for all deployment types
|
|
280
|
+
- Added health check monitoring setup examples (Datadog, UptimeRobot, Prometheus)
|
|
281
|
+
|
|
22
282
|
## [1.3.5] - 2025-12-02
|
|
23
283
|
|
|
24
284
|
**Self-host your own remote MCP server** - Use Attio from Claude.ai, ChatGPT, or any remote MCP client without relying on third-party platforms.
|
|
@@ -66,7 +326,7 @@ OAuth access token support - enables delegated authentication for third-party in
|
|
|
66
326
|
- Tokens saved to `.env.local` for easy configuration
|
|
67
327
|
|
|
68
328
|
- **Cloudflare Worker OAuth template** (#928) - Self-hostable OAuth broker for teams
|
|
69
|
-
- Full OAuth 2.1 + PKCE implementation at `examples/cloudflare-
|
|
329
|
+
- Full OAuth 2.1 + PKCE implementation at `examples/cloudflare-mcp-server/`
|
|
70
330
|
- OAuth discovery endpoint, CORS support for Claude.ai
|
|
71
331
|
- Deploy with `wrangler deploy`
|
|
72
332
|
|
|
@@ -100,12 +360,6 @@ OAuth access token support - enables delegated authentication for third-party in
|
|
|
100
360
|
- **Note**: Old package owned by different npm user, cannot be deprecated by maintainers
|
|
101
361
|
- **Result**: Clear installation instructions prevent users from installing wrong package
|
|
102
362
|
|
|
103
|
-
### Fixed
|
|
104
|
-
|
|
105
|
-
### Security
|
|
106
|
-
|
|
107
|
-
### Deprecated
|
|
108
|
-
|
|
109
363
|
## [1.2.0] - 2025-11-03
|
|
110
364
|
|
|
111
365
|
This release introduces intelligent workspace member auto-resolution for actor-reference filtering, enabling natural filtering syntax with emails and names instead of requiring manual UUID lookups. The update includes critical fixes for filter transformation, client initialization, and exact matching behavior.
|