attio-mcp 1.3.6 → 1.4.1

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.
Files changed (440) hide show
  1. package/CHANGELOG.md +284 -3
  2. package/README.md +143 -334
  3. package/dist/api/attio-client.d.ts +13 -3
  4. package/dist/api/attio-client.d.ts.map +1 -1
  5. package/dist/api/attio-client.js +37 -7
  6. package/dist/api/attio-client.js.map +1 -1
  7. package/dist/api/attribute-types.d.ts.map +1 -1
  8. package/dist/api/attribute-types.js +42 -20
  9. package/dist/api/attribute-types.js.map +1 -1
  10. package/dist/api/client-context.d.ts.map +1 -1
  11. package/dist/api/client-context.js +28 -42
  12. package/dist/api/client-context.js.map +1 -1
  13. package/dist/api/operations/batch.d.ts +3 -3
  14. package/dist/api/operations/batch.d.ts.map +1 -1
  15. package/dist/api/operations/batch.js.map +1 -1
  16. package/dist/api/operations/crud.d.ts.map +1 -1
  17. package/dist/api/operations/crud.js.map +1 -1
  18. package/dist/api/operations/search.d.ts.map +1 -1
  19. package/dist/api/operations/search.js.map +1 -1
  20. package/dist/cli/commands/generate-skill.d.ts +28 -0
  21. package/dist/cli/commands/generate-skill.d.ts.map +1 -0
  22. package/dist/cli/commands/generate-skill.js +101 -0
  23. package/dist/cli/commands/generate-skill.js.map +1 -0
  24. package/dist/cli/discover.js +65 -0
  25. package/dist/cli/discover.js.map +1 -1
  26. package/dist/cli.js.map +1 -1
  27. package/dist/config/deal-defaults.d.ts +2 -2
  28. package/dist/config/deal-defaults.d.ts.map +1 -1
  29. package/dist/config/deal-defaults.js +15 -6
  30. package/dist/config/deal-defaults.js.map +1 -1
  31. package/dist/config/tool-aliases.d.ts +12 -0
  32. package/dist/config/tool-aliases.d.ts.map +1 -1
  33. package/dist/config/tool-aliases.js +213 -69
  34. package/dist/config/tool-aliases.js.map +1 -1
  35. package/dist/constants/tool-names.d.ts +84 -0
  36. package/dist/constants/tool-names.d.ts.map +1 -0
  37. package/dist/constants/tool-names.js +81 -0
  38. package/dist/constants/tool-names.js.map +1 -0
  39. package/dist/constants/universal.constants.d.ts +24 -0
  40. package/dist/constants/universal.constants.d.ts.map +1 -1
  41. package/dist/constants/universal.constants.js +81 -9
  42. package/dist/constants/universal.constants.js.map +1 -1
  43. package/dist/errors/value-match-error.js +1 -1
  44. package/dist/handlers/tool-configs/lists.d.ts +142 -19
  45. package/dist/handlers/tool-configs/lists.d.ts.map +1 -1
  46. package/dist/handlers/tool-configs/lists.js +319 -25
  47. package/dist/handlers/tool-configs/lists.js.map +1 -1
  48. package/dist/handlers/tool-configs/universal/batch-search.d.ts +1 -1
  49. package/dist/handlers/tool-configs/universal/batch-search.d.ts.map +1 -1
  50. package/dist/handlers/tool-configs/universal/batch-search.js +17 -13
  51. package/dist/handlers/tool-configs/universal/batch-search.js.map +1 -1
  52. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts +26 -4
  53. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.d.ts.map +1 -1
  54. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js +181 -21
  55. package/dist/handlers/tool-configs/universal/core/crud-error-handlers.js.map +1 -1
  56. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts +4 -4
  57. package/dist/handlers/tool-configs/universal/core/crud-operations.d.ts.map +1 -1
  58. package/dist/handlers/tool-configs/universal/core/crud-operations.js +37 -24
  59. package/dist/handlers/tool-configs/universal/core/crud-operations.js.map +1 -1
  60. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js +3 -3
  61. package/dist/handlers/tool-configs/universal/core/detailed-info-operations.js.map +1 -1
  62. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts +17 -0
  63. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.d.ts.map +1 -0
  64. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js +118 -0
  65. package/dist/handlers/tool-configs/universal/core/error-enhancers/attribute-enhancer.js.map +1 -0
  66. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts +14 -0
  67. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.d.ts.map +1 -0
  68. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js +77 -0
  69. package/dist/handlers/tool-configs/universal/core/error-enhancers/complex-type-enhancer.js.map +1 -0
  70. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts +24 -0
  71. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.d.ts.map +1 -0
  72. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js +35 -0
  73. package/dist/handlers/tool-configs/universal/core/error-enhancers/index.js.map +1 -0
  74. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts +15 -0
  75. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.d.ts.map +1 -0
  76. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js +108 -0
  77. package/dist/handlers/tool-configs/universal/core/error-enhancers/record-reference-enhancer.js.map +1 -0
  78. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts +14 -0
  79. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.d.ts.map +1 -0
  80. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js +91 -0
  81. package/dist/handlers/tool-configs/universal/core/error-enhancers/required-fields-enhancer.js.map +1 -0
  82. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts +14 -0
  83. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.d.ts.map +1 -0
  84. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js +118 -0
  85. package/dist/handlers/tool-configs/universal/core/error-enhancers/select-status-enhancer.js.map +1 -0
  86. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts +77 -0
  87. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.d.ts.map +1 -0
  88. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js +42 -0
  89. package/dist/handlers/tool-configs/universal/core/error-enhancers/types.js.map +1 -0
  90. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts +15 -0
  91. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.d.ts.map +1 -0
  92. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js +109 -0
  93. package/dist/handlers/tool-configs/universal/core/error-enhancers/uniqueness-enhancer.js.map +1 -0
  94. package/dist/handlers/tool-configs/universal/core/index.d.ts +63 -22
  95. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  96. package/dist/handlers/tool-configs/universal/core/index.js +24 -22
  97. package/dist/handlers/tool-configs/universal/core/index.js.map +1 -1
  98. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts +43 -1
  99. package/dist/handlers/tool-configs/universal/core/metadata-operations.d.ts.map +1 -1
  100. package/dist/handlers/tool-configs/universal/core/metadata-operations.js +117 -11
  101. package/dist/handlers/tool-configs/universal/core/metadata-operations.js.map +1 -1
  102. package/dist/handlers/tool-configs/universal/core/notes-operations.js +12 -12
  103. package/dist/handlers/tool-configs/universal/core/notes-operations.js.map +1 -1
  104. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts +6 -3
  105. package/dist/handlers/tool-configs/universal/core/record-details-operations.d.ts.map +1 -1
  106. package/dist/handlers/tool-configs/universal/core/record-details-operations.js +35 -10
  107. package/dist/handlers/tool-configs/universal/core/record-details-operations.js.map +1 -1
  108. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts +4 -3
  109. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  110. package/dist/handlers/tool-configs/universal/core/search-operations.js +31 -12
  111. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  112. package/dist/handlers/tool-configs/universal/core/utils.d.ts +1 -0
  113. package/dist/handlers/tool-configs/universal/core/utils.d.ts.map +1 -1
  114. package/dist/handlers/tool-configs/universal/core/utils.js +3 -0
  115. package/dist/handlers/tool-configs/universal/core/utils.js.map +1 -1
  116. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.d.ts.map +1 -1
  117. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js +32 -9
  118. package/dist/handlers/tool-configs/universal/field-mapper/constants/companies.js.map +1 -1
  119. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.d.ts.map +1 -1
  120. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js +45 -6
  121. package/dist/handlers/tool-configs/universal/field-mapper/constants/deals.js.map +1 -1
  122. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.d.ts.map +1 -1
  123. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js +36 -5
  124. package/dist/handlers/tool-configs/universal/field-mapper/constants/people.js.map +1 -1
  125. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts +1 -1
  126. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.d.ts.map +1 -1
  127. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js +17 -1
  128. package/dist/handlers/tool-configs/universal/field-mapper/transformers/value-transformer.js.map +1 -1
  129. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.d.ts.map +1 -1
  130. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js +3 -1
  131. package/dist/handlers/tool-configs/universal/field-mapper/validators/field-validator.js.map +1 -1
  132. package/dist/handlers/tool-configs/universal/index.d.ts +75 -34
  133. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  134. package/dist/handlers/tool-configs/universal/index.js +58 -58
  135. package/dist/handlers/tool-configs/universal/index.js.map +1 -1
  136. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts +3 -3
  137. package/dist/handlers/tool-configs/universal/operations/advanced-search.d.ts.map +1 -1
  138. package/dist/handlers/tool-configs/universal/operations/advanced-search.js +17 -10
  139. package/dist/handlers/tool-configs/universal/operations/advanced-search.js.map +1 -1
  140. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts +1 -1
  141. package/dist/handlers/tool-configs/universal/operations/batch-format.d.ts.map +1 -1
  142. package/dist/handlers/tool-configs/universal/operations/batch-format.js +31 -10
  143. package/dist/handlers/tool-configs/universal/operations/batch-format.js.map +1 -1
  144. package/dist/handlers/tool-configs/universal/operations/batch-operations.js +3 -3
  145. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts +3 -3
  146. package/dist/handlers/tool-configs/universal/operations/content-search.d.ts.map +1 -1
  147. package/dist/handlers/tool-configs/universal/operations/content-search.js +15 -9
  148. package/dist/handlers/tool-configs/universal/operations/content-search.js.map +1 -1
  149. package/dist/handlers/tool-configs/universal/operations/index.d.ts +10 -10
  150. package/dist/handlers/tool-configs/universal/operations/index.js +15 -15
  151. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts +3 -3
  152. package/dist/handlers/tool-configs/universal/operations/relationship-search.d.ts.map +1 -1
  153. package/dist/handlers/tool-configs/universal/operations/relationship-search.js +11 -8
  154. package/dist/handlers/tool-configs/universal/operations/relationship-search.js.map +1 -1
  155. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts +3 -3
  156. package/dist/handlers/tool-configs/universal/operations/timeframe-search.d.ts.map +1 -1
  157. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js +16 -10
  158. package/dist/handlers/tool-configs/universal/operations/timeframe-search.js.map +1 -1
  159. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.d.ts.map +1 -1
  160. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js +5 -2
  161. package/dist/handlers/tool-configs/universal/schemas/utility-schemas.js.map +1 -1
  162. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts +29 -0
  163. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.d.ts.map +1 -1
  164. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js +28 -0
  165. package/dist/handlers/tool-configs/universal/schemas/validation-schemas.js.map +1 -1
  166. package/dist/handlers/tool-configs/universal/schemas.d.ts +1 -1
  167. package/dist/handlers/tool-configs/universal/schemas.d.ts.map +1 -1
  168. package/dist/handlers/tool-configs/universal/schemas.js +1 -1
  169. package/dist/handlers/tool-configs/universal/schemas.js.map +1 -1
  170. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts +27 -7
  171. package/dist/handlers/tool-configs/universal/shared-handlers.d.ts.map +1 -1
  172. package/dist/handlers/tool-configs/universal/shared-handlers.js +221 -25
  173. package/dist/handlers/tool-configs/universal/shared-handlers.js.map +1 -1
  174. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js +2 -2
  175. package/dist/handlers/tool-configs/universal/smithery-diagnostics.js.map +1 -1
  176. package/dist/handlers/tool-configs/universal/types.d.ts +17 -7
  177. package/dist/handlers/tool-configs/universal/types.d.ts.map +1 -1
  178. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts +11 -0
  179. package/dist/handlers/tool-configs/universal/validators/schema-validator.d.ts.map +1 -1
  180. package/dist/handlers/tool-configs/universal/validators/schema-validator.js +80 -17
  181. package/dist/handlers/tool-configs/universal/validators/schema-validator.js.map +1 -1
  182. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  183. package/dist/handlers/tools/dispatcher/core.js +9 -2
  184. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  185. package/dist/handlers/tools/dispatcher/operations/lists.d.ts +20 -1
  186. package/dist/handlers/tools/dispatcher/operations/lists.d.ts.map +1 -1
  187. package/dist/handlers/tools/dispatcher/operations/lists.js +366 -17
  188. package/dist/handlers/tools/dispatcher/operations/lists.js.map +1 -1
  189. package/dist/handlers/tools/formatters.d.ts +8 -1
  190. package/dist/handlers/tools/formatters.d.ts.map +1 -1
  191. package/dist/handlers/tools/formatters.js +30 -14
  192. package/dist/handlers/tools/formatters.js.map +1 -1
  193. package/dist/handlers/tools/registry.d.ts +409 -122
  194. package/dist/handlers/tools/registry.d.ts.map +1 -1
  195. package/dist/handlers/tools/registry.js +14 -9
  196. package/dist/handlers/tools/registry.js.map +1 -1
  197. package/dist/handlers/tools/standards/index.d.ts.map +1 -1
  198. package/dist/handlers/tools/standards/index.js +19 -11
  199. package/dist/handlers/tools/standards/index.js.map +1 -1
  200. package/dist/objects/companies/attributes.d.ts +5 -0
  201. package/dist/objects/companies/attributes.d.ts.map +1 -1
  202. package/dist/objects/companies/attributes.js +45 -31
  203. package/dist/objects/companies/attributes.js.map +1 -1
  204. package/dist/objects/companies/basic.d.ts.map +1 -1
  205. package/dist/objects/companies/basic.js.map +1 -1
  206. package/dist/objects/lists/base.d.ts.map +1 -1
  207. package/dist/objects/lists/base.js +6 -2
  208. package/dist/objects/lists/base.js.map +1 -1
  209. package/dist/objects/lists/shared.d.ts.map +1 -1
  210. package/dist/objects/lists/shared.js +12 -1
  211. package/dist/objects/lists/shared.js.map +1 -1
  212. package/dist/objects/records/index.d.ts.map +1 -1
  213. package/dist/objects/records/index.js.map +1 -1
  214. package/dist/server/createServer.d.ts.map +1 -1
  215. package/dist/server/createServer.js +4 -3
  216. package/dist/server/createServer.js.map +1 -1
  217. package/dist/services/ErrorService.js +3 -3
  218. package/dist/services/ErrorService.js.map +1 -1
  219. package/dist/services/OpenAiCompatibilityService.d.ts.map +1 -1
  220. package/dist/services/OpenAiCompatibilityService.js +12 -8
  221. package/dist/services/OpenAiCompatibilityService.js.map +1 -1
  222. package/dist/services/UniversalCreateService.d.ts +3 -3
  223. package/dist/services/UniversalCreateService.d.ts.map +1 -1
  224. package/dist/services/UniversalCreateService.js +162 -38
  225. package/dist/services/UniversalCreateService.js.map +1 -1
  226. package/dist/services/UniversalMetadataService.d.ts +8 -0
  227. package/dist/services/UniversalMetadataService.d.ts.map +1 -1
  228. package/dist/services/UniversalMetadataService.js +21 -0
  229. package/dist/services/UniversalMetadataService.js.map +1 -1
  230. package/dist/services/UniversalRetrievalService.d.ts +7 -5
  231. package/dist/services/UniversalRetrievalService.d.ts.map +1 -1
  232. package/dist/services/UniversalRetrievalService.js +31 -29
  233. package/dist/services/UniversalRetrievalService.js.map +1 -1
  234. package/dist/services/UniversalSearchService.d.ts +8 -27
  235. package/dist/services/UniversalSearchService.d.ts.map +1 -1
  236. package/dist/services/UniversalSearchService.js +19 -327
  237. package/dist/services/UniversalSearchService.js.map +1 -1
  238. package/dist/services/UniversalUpdateService.d.ts +25 -7
  239. package/dist/services/UniversalUpdateService.d.ts.map +1 -1
  240. package/dist/services/UniversalUpdateService.js +132 -157
  241. package/dist/services/UniversalUpdateService.js.map +1 -1
  242. package/dist/services/UniversalUtilityService.d.ts +9 -1
  243. package/dist/services/UniversalUtilityService.d.ts.map +1 -1
  244. package/dist/services/UniversalUtilityService.js +13 -0
  245. package/dist/services/UniversalUtilityService.js.map +1 -1
  246. package/dist/services/ValidationService.js +4 -4
  247. package/dist/services/ValidationService.js.map +1 -1
  248. package/dist/services/create/attio-create.service.d.ts.map +1 -1
  249. package/dist/services/create/attio-create.service.js +2 -1
  250. package/dist/services/create/attio-create.service.js.map +1 -1
  251. package/dist/services/create/creators/company-creator.js.map +1 -1
  252. package/dist/services/create/creators/note-creator.d.ts.map +1 -1
  253. package/dist/services/create/creators/note-creator.js +4 -2
  254. package/dist/services/create/creators/note-creator.js.map +1 -1
  255. package/dist/services/create/factory.d.ts.map +1 -1
  256. package/dist/services/create/factory.js +2 -1
  257. package/dist/services/create/factory.js.map +1 -1
  258. package/dist/services/create/mock-create.service.d.ts.map +1 -1
  259. package/dist/services/create/mock-create.service.js.map +1 -1
  260. package/dist/services/create/strategies/BaseCreateStrategy.d.ts +2 -2
  261. package/dist/services/create/strategies/BaseCreateStrategy.d.ts.map +1 -1
  262. package/dist/services/create/strategies/ListCreateStrategy.d.ts +3 -3
  263. package/dist/services/create/strategies/ListCreateStrategy.d.ts.map +1 -1
  264. package/dist/services/create/strategies/ListCreateStrategy.js +2 -16
  265. package/dist/services/create/strategies/ListCreateStrategy.js.map +1 -1
  266. package/dist/services/create/strategies/TaskCreateStrategy.d.ts.map +1 -1
  267. package/dist/services/create/strategies/TaskCreateStrategy.js.map +1 -1
  268. package/dist/services/metadata/AttributeOptionsService.d.ts +38 -0
  269. package/dist/services/metadata/AttributeOptionsService.d.ts.map +1 -0
  270. package/dist/services/metadata/AttributeOptionsService.js +92 -0
  271. package/dist/services/metadata/AttributeOptionsService.js.map +1 -0
  272. package/dist/services/metadata/MetadataDiscoveryService.d.ts.map +1 -1
  273. package/dist/services/metadata/MetadataDiscoveryService.js.map +1 -1
  274. package/dist/services/metadata/MetadataTransformService.d.ts.map +1 -1
  275. package/dist/services/metadata/MetadataTransformService.js.map +1 -1
  276. package/dist/services/metadata/index.d.ts +1 -0
  277. package/dist/services/metadata/index.d.ts.map +1 -1
  278. package/dist/services/metadata/index.js +1 -0
  279. package/dist/services/metadata/index.js.map +1 -1
  280. package/dist/services/search/QueryApiService.d.ts +27 -0
  281. package/dist/services/search/QueryApiService.d.ts.map +1 -0
  282. package/dist/services/search/QueryApiService.js +144 -0
  283. package/dist/services/search/QueryApiService.js.map +1 -0
  284. package/dist/services/search/RecordsSearchService.d.ts +27 -0
  285. package/dist/services/search/RecordsSearchService.d.ts.map +1 -0
  286. package/dist/services/search/RecordsSearchService.js +122 -0
  287. package/dist/services/search/RecordsSearchService.js.map +1 -0
  288. package/dist/services/search/SearchCoordinator.d.ts +41 -0
  289. package/dist/services/search/SearchCoordinator.d.ts.map +1 -0
  290. package/dist/services/search/SearchCoordinator.js +83 -0
  291. package/dist/services/search/SearchCoordinator.js.map +1 -0
  292. package/dist/services/search/StrategyFactory.d.ts +31 -0
  293. package/dist/services/search/StrategyFactory.d.ts.map +1 -0
  294. package/dist/services/search/StrategyFactory.js +100 -0
  295. package/dist/services/search/StrategyFactory.js.map +1 -0
  296. package/dist/services/search-strategies/BaseSearchStrategy.d.ts +5 -5
  297. package/dist/services/search-strategies/BaseSearchStrategy.d.ts.map +1 -1
  298. package/dist/services/search-strategies/BaseSearchStrategy.js.map +1 -1
  299. package/dist/services/search-strategies/CompanySearchStrategy.d.ts +4 -4
  300. package/dist/services/search-strategies/CompanySearchStrategy.d.ts.map +1 -1
  301. package/dist/services/search-strategies/CompanySearchStrategy.js +1 -1
  302. package/dist/services/search-strategies/CompanySearchStrategy.js.map +1 -1
  303. package/dist/services/search-strategies/DealSearchStrategy.d.ts +4 -4
  304. package/dist/services/search-strategies/DealSearchStrategy.d.ts.map +1 -1
  305. package/dist/services/search-strategies/DealSearchStrategy.js +1 -1
  306. package/dist/services/search-strategies/DealSearchStrategy.js.map +1 -1
  307. package/dist/services/search-strategies/ListSearchStrategy.d.ts +34 -7
  308. package/dist/services/search-strategies/ListSearchStrategy.d.ts.map +1 -1
  309. package/dist/services/search-strategies/ListSearchStrategy.js +65 -24
  310. package/dist/services/search-strategies/ListSearchStrategy.js.map +1 -1
  311. package/dist/services/search-strategies/NoteSearchStrategy.d.ts +4 -4
  312. package/dist/services/search-strategies/NoteSearchStrategy.d.ts.map +1 -1
  313. package/dist/services/search-strategies/NoteSearchStrategy.js +6 -7
  314. package/dist/services/search-strategies/NoteSearchStrategy.js.map +1 -1
  315. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts +4 -4
  316. package/dist/services/search-strategies/PeopleSearchStrategy.d.ts.map +1 -1
  317. package/dist/services/search-strategies/PeopleSearchStrategy.js +1 -1
  318. package/dist/services/search-strategies/PeopleSearchStrategy.js.map +1 -1
  319. package/dist/services/search-strategies/TaskSearchStrategy.d.ts +4 -4
  320. package/dist/services/search-strategies/TaskSearchStrategy.d.ts.map +1 -1
  321. package/dist/services/search-strategies/TaskSearchStrategy.js +7 -8
  322. package/dist/services/search-strategies/TaskSearchStrategy.js.map +1 -1
  323. package/dist/services/search-strategies/interfaces.d.ts +7 -6
  324. package/dist/services/search-strategies/interfaces.d.ts.map +1 -1
  325. package/dist/services/search-utilities/SearchUtilities.d.ts +22 -7
  326. package/dist/services/search-utilities/SearchUtilities.d.ts.map +1 -1
  327. package/dist/services/search-utilities/SearchUtilities.js +52 -4
  328. package/dist/services/search-utilities/SearchUtilities.js.map +1 -1
  329. package/dist/services/skill-generator/OutputWriterService.d.ts +41 -0
  330. package/dist/services/skill-generator/OutputWriterService.d.ts.map +1 -0
  331. package/dist/services/skill-generator/OutputWriterService.js +100 -0
  332. package/dist/services/skill-generator/OutputWriterService.js.map +1 -0
  333. package/dist/services/skill-generator/SchemaFormatterService.d.ts +61 -0
  334. package/dist/services/skill-generator/SchemaFormatterService.d.ts.map +1 -0
  335. package/dist/services/skill-generator/SchemaFormatterService.js +168 -0
  336. package/dist/services/skill-generator/SchemaFormatterService.js.map +1 -0
  337. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts +84 -0
  338. package/dist/services/skill-generator/WorkspaceSchemaService.d.ts.map +1 -0
  339. package/dist/services/skill-generator/WorkspaceSchemaService.js +292 -0
  340. package/dist/services/skill-generator/WorkspaceSchemaService.js.map +1 -0
  341. package/dist/services/skill-generator/index.d.ts +12 -0
  342. package/dist/services/skill-generator/index.d.ts.map +1 -0
  343. package/dist/services/skill-generator/index.js +11 -0
  344. package/dist/services/skill-generator/index.js.map +1 -0
  345. package/dist/services/skill-generator/types.d.ts +137 -0
  346. package/dist/services/skill-generator/types.d.ts.map +1 -0
  347. package/dist/services/skill-generator/types.js +10 -0
  348. package/dist/services/skill-generator/types.js.map +1 -0
  349. package/dist/services/update/FieldPersistenceHandler.d.ts +101 -0
  350. package/dist/services/update/FieldPersistenceHandler.d.ts.map +1 -0
  351. package/dist/services/update/FieldPersistenceHandler.js +207 -0
  352. package/dist/services/update/FieldPersistenceHandler.js.map +1 -0
  353. package/dist/services/update/FieldValidationHandler.d.ts +77 -0
  354. package/dist/services/update/FieldValidationHandler.d.ts.map +1 -0
  355. package/dist/services/update/FieldValidationHandler.js +157 -0
  356. package/dist/services/update/FieldValidationHandler.js.map +1 -0
  357. package/dist/services/update/MetadataResolver.d.ts +50 -0
  358. package/dist/services/update/MetadataResolver.d.ts.map +1 -0
  359. package/dist/services/update/MetadataResolver.js +110 -0
  360. package/dist/services/update/MetadataResolver.js.map +1 -0
  361. package/dist/services/update/ResponseNormalizer.d.ts +4 -4
  362. package/dist/services/update/ResponseNormalizer.d.ts.map +1 -1
  363. package/dist/services/update/ResponseNormalizer.js +18 -9
  364. package/dist/services/update/ResponseNormalizer.js.map +1 -1
  365. package/dist/services/update/UpdateOrchestrator.d.ts +37 -0
  366. package/dist/services/update/UpdateOrchestrator.d.ts.map +1 -0
  367. package/dist/services/update/UpdateOrchestrator.js +58 -0
  368. package/dist/services/update/UpdateOrchestrator.js.map +1 -0
  369. package/dist/services/update/UpdateValidation.d.ts +7 -3
  370. package/dist/services/update/UpdateValidation.d.ts.map +1 -1
  371. package/dist/services/update/UpdateValidation.js +56 -32
  372. package/dist/services/update/UpdateValidation.js.map +1 -1
  373. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts +2 -2
  374. package/dist/services/update/strategies/BaseUpdateStrategy.d.ts.map +1 -1
  375. package/dist/services/update/strategies/ListUpdateStrategy.d.ts +3 -3
  376. package/dist/services/update/strategies/ListUpdateStrategy.d.ts.map +1 -1
  377. package/dist/services/update/strategies/ListUpdateStrategy.js +4 -14
  378. package/dist/services/update/strategies/ListUpdateStrategy.js.map +1 -1
  379. package/dist/services/value-transformer/index.d.ts +57 -0
  380. package/dist/services/value-transformer/index.d.ts.map +1 -0
  381. package/dist/services/value-transformer/index.js +326 -0
  382. package/dist/services/value-transformer/index.js.map +1 -0
  383. package/dist/services/value-transformer/multi-select-transformer.d.ts +63 -0
  384. package/dist/services/value-transformer/multi-select-transformer.d.ts.map +1 -0
  385. package/dist/services/value-transformer/multi-select-transformer.js +144 -0
  386. package/dist/services/value-transformer/multi-select-transformer.js.map +1 -0
  387. package/dist/services/value-transformer/record-reference-transformer.d.ts +43 -0
  388. package/dist/services/value-transformer/record-reference-transformer.d.ts.map +1 -0
  389. package/dist/services/value-transformer/record-reference-transformer.js +245 -0
  390. package/dist/services/value-transformer/record-reference-transformer.js.map +1 -0
  391. package/dist/services/value-transformer/select-transformer.d.ts +48 -0
  392. package/dist/services/value-transformer/select-transformer.d.ts.map +1 -0
  393. package/dist/services/value-transformer/select-transformer.js +232 -0
  394. package/dist/services/value-transformer/select-transformer.js.map +1 -0
  395. package/dist/services/value-transformer/status-transformer.d.ts +32 -0
  396. package/dist/services/value-transformer/status-transformer.d.ts.map +1 -0
  397. package/dist/services/value-transformer/status-transformer.js +329 -0
  398. package/dist/services/value-transformer/status-transformer.js.map +1 -0
  399. package/dist/services/value-transformer/types.d.ts +100 -0
  400. package/dist/services/value-transformer/types.d.ts.map +1 -0
  401. package/dist/services/value-transformer/types.js +6 -0
  402. package/dist/services/value-transformer/types.js.map +1 -0
  403. package/dist/templates/skill/SKILL.template.md +78 -0
  404. package/dist/templates/skill/attribute-reference.template.md +126 -0
  405. package/dist/templates/skill/complex-types.template.md +255 -0
  406. package/dist/types/attio.d.ts +55 -0
  407. package/dist/types/attio.d.ts.map +1 -1
  408. package/dist/types/attio.js +36 -0
  409. package/dist/types/attio.js.map +1 -1
  410. package/dist/utils/client-resolver.d.ts.map +1 -1
  411. package/dist/utils/client-resolver.js +8 -16
  412. package/dist/utils/client-resolver.js.map +1 -1
  413. package/dist/utils/complex-type-validation.d.ts +16 -0
  414. package/dist/utils/complex-type-validation.d.ts.map +1 -0
  415. package/dist/utils/complex-type-validation.js +196 -0
  416. package/dist/utils/complex-type-validation.js.map +1 -0
  417. package/dist/utils/error-response-utils.js +3 -3
  418. package/dist/utils/error-response-utils.js.map +1 -1
  419. package/dist/utils/error-utilities.d.ts.map +1 -1
  420. package/dist/utils/error-utilities.js +16 -9
  421. package/dist/utils/error-utilities.js.map +1 -1
  422. package/dist/utils/location-normalizer.d.ts +26 -0
  423. package/dist/utils/location-normalizer.d.ts.map +1 -0
  424. package/dist/utils/location-normalizer.js +39 -0
  425. package/dist/utils/location-normalizer.js.map +1 -0
  426. package/dist/utils/metadata-utils.d.ts +27 -0
  427. package/dist/utils/metadata-utils.d.ts.map +1 -0
  428. package/dist/utils/metadata-utils.js +59 -0
  429. package/dist/utils/metadata-utils.js.map +1 -0
  430. package/dist/utils/normalization/record-data-normalization.d.ts +47 -0
  431. package/dist/utils/normalization/record-data-normalization.d.ts.map +1 -0
  432. package/dist/utils/normalization/record-data-normalization.js +103 -0
  433. package/dist/utils/normalization/record-data-normalization.js.map +1 -0
  434. package/dist/utils/personal-name-parser.d.ts.map +1 -1
  435. package/dist/utils/personal-name-parser.js +26 -17
  436. package/dist/utils/personal-name-parser.js.map +1 -1
  437. package/dist/validators/company/field_detector.d.ts.map +1 -1
  438. package/dist/validators/company/field_detector.js +5 -0
  439. package/dist/validators/company/field_detector.js.map +1 -1
  440. package/package.json +35 -33
package/CHANGELOG.md CHANGED
@@ -7,18 +7,292 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Breaking Changes
10
+ ## [1.4.1] - 2026-01-28
11
11
 
12
12
  ### Added
13
13
 
14
+ - **UniversalRecord type guards** (#1073) - Type discrimination functions for list/record handling
15
+ - `isAttioRecord()`: Check if record has values wrapper (companies, people, deals, tasks)
16
+ - `isAttioList()`: Check if record has list_id in id object
17
+ - `getRecordId()`: Extract record_id or list_id based on type
18
+ - Foundation for enforcing UniversalRecord type across universal tools
19
+ - Re-exported from `@/handlers/tool-configs/universal/core/utils` for convenience
20
+
14
21
  ### Changed
15
22
 
23
+ - **Consolidated list filter tools (5 → 1)** (#1069) - Part of Issue #1059 list tools consolidation (11 → 4 tools)
24
+ - Enhanced `filter-list-entries` with 4 auto-detected parameter modes
25
+ - Deprecated tools (removal in v2.0.0): `advanced-filter-list-entries`, `filter-list-entries-by-parent`, `filter-list-entries-by-parent-id`
26
+ - Full backward compatibility maintained
27
+ - **Consolidated list entry management tools (3 → 1)** (#1075) - Part of Issue #1059 list tools consolidation (11 → 4 tools)
28
+ - Enhanced `manage-list-entry` with 3 auto-detected parameter modes
29
+ - Deprecated tools (removal in v2.0.0): `add-record-to-list`, `remove-record-from-list`, `update-list-entry`
30
+ - Full backward compatibility maintained
31
+ - **List tools consolidation complete** (#1071) - Part of Issue #1059 list tools consolidation (11 → 4 tools)
32
+ - Added runtime deprecation warnings for 8 legacy list tools
33
+ - Comprehensive migration guide at `/docs/migration/v2-list-tools.md`
34
+ - Updated tool count: 11 → 4 (64% reduction achieved)
35
+ - **Smithery references temporarily removed** (#1097) - Smithery changed their deployment model to require external hosting
36
+ - Removed Smithery badge from README
37
+ - Updated installation tiers (Tier 1-3 instead of 1-4)
38
+ - ChatGPT users should use Cloudflare Worker deployment
39
+ - Will be restored when Cloudflare Worker hosting is set up for Smithery
40
+
16
41
  ### Fixed
17
42
 
18
- ### Security
43
+ - Universal tools (`search_records`, `get_record_details`) now return proper list format matching list-specific tools (#1068)
44
+ - Universal update/search flows now preserve list-native shapes across the UniversalRecord union (#1073)
45
+ - `update_record` now accepts legacy `data` payloads, wraps top-level field updates into `record_data`, parses JSON string updates, and normalizes status/title inputs for stage updates (#1099)
46
+ - `update_record` input normalization now uses immutable transformations to prevent shared state mutations (#1100)
47
+ - MCP Registry publishing workflow schema version and re-publish errors (#1066)
48
+ - Operations playbook validation tests now work across all workspaces via dynamic attribute discovery (#973, #1081)
49
+
50
+ ## [1.4.0] - 2025-12-29
51
+
52
+ **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.
53
+
54
+ ### Added
55
+
56
+ - **Workspace Schema Skill Generator** (#983) - Auto-generate Claude Skills from Attio workspace schemas
57
+ - New CLI command `attio-discover generate-skill` for generating workspace schema documentation
58
+ - Supports companies, people, and deals (Phase 1 objects) with experimental support for custom objects
59
+ - Three output formats: Claude Skill (SKILL.md + resources/), Markdown (single file), and JSON
60
+ - Prominent Display Name ↔ API Slug mapping tables to address #1 LLM error source
61
+ - Select/status option values with 20-item truncation and "(+N more)" indicators
62
+ - Complex type structure documentation (location, personal-name, phone-number, email-address)
63
+ - Multi-select, unique, and required field indicators for accurate attribute usage
64
+ - ZIP packaging support (--zip flag) for easy Claude desktop upload
65
+ - Graceful error handling with partial data generation when individual objects fail
66
+ - Handlebars-based templating for clean separation of logic and presentation
67
+ - Security validation prevents directory traversal attacks
68
+ - Comprehensive unit tests for all services (45 tests total)
69
+
70
+ - **Universal Usage Guide Skill** (#1018) - Hand-crafted skill for workflow patterns and error prevention
71
+ - Universal workflow patterns (Find or Create, Batch Update, Pipeline Movement, Data Enrichment)
72
+ - Golden Rules error prevention system (read-only fields, multi-select arrays, data types, UUID validation)
73
+ - Complete MCP tool reference with signatures and examples for all tools
74
+ - Integration patterns for deals pipeline, list-based organization, lead qualification, bulk import
75
+ - Object-agnostic design supporting companies, deals, people, lists, and custom objects
76
+ - Cross-references to attio-workspace-schema skill for workspace-specific details
77
+ - Two-skill architecture: Schema skill (WHAT) + Usage skill (HOW)
78
+
79
+ - **Select-field Transformer** (#1019, #1029) - Quality-of-life enhancement for select field values
80
+ - Case-insensitive title matching: `"potential customer"` → `"Potential Customer"`
81
+ - Partial matching support: `"Potential"` → `"Potential Customer"`
82
+ - Better error messages listing valid options with suggestions
83
+ - UUID pass-through support (no API lookup needed)
84
+ - 5-minute TTL caching to minimize API calls
85
+ - Consistent UX with existing status-transformer
86
+
87
+ - **`records_get_attribute_options` tool** (#975) - Get valid options for select, status, and multi-select attributes
88
+ - Prevents "Cannot find select option" errors by showing available options upfront
89
+ - Works with companies, people, deals, and custom objects
90
+ - Returns option titles, IDs, and active/archived status
91
+
92
+ - **Comprehensive FieldPersistenceHandler tests** (#984) - 50 new unit tests
93
+ - Optional actualRecord parameter behavior (10 tests)
94
+ - Verification modes: disabled, warn-only, strict (15 tests)
95
+ - Semantic vs cosmetic mismatch filtering (15 tests)
96
+ - Integration with UpdateValidation (10 tests)
97
+ - Increases total test count from 2973 to 3026 (+53 tests)
98
+
99
+ - **Configurable skill generator option fetch delay** (#1015, #1024) - New `--option-fetch-delay` flag to tune rate limiting between option fetches
100
+
101
+ - **Attio skill generator meta-skill** (#1020, #1024) - Meta-skill for generating workspace schema documentation
102
+
103
+ - **Phone validation to @attio-mcp/core** (#951, #964) - Extracted phone number validation into dedicated package
104
+ - New `@attio-mcp/core` package with phone validation utilities
105
+ - E.164 format support with international dialing code parsing
106
+ - Reusable validation logic for phone number attributes across the codebase
107
+
108
+ ### Changed
109
+
110
+ - **Extract search services from UniversalSearchService** (#935, #974) - Improved search architecture and maintainability
111
+ - Created dedicated strategy classes: CompanySearchStrategy, PeopleSearchStrategy, NoteSearchStrategy, TaskSearchStrategy
112
+ - Extracted common search patterns into BaseSearchStrategy abstract class
113
+ - Reduced code duplication and improved testability
114
+ - Better separation of concerns for resource-specific search logic
115
+
116
+ - **Transformation type rename** (#1055) - Renamed transformation type for clarity
117
+ - Renamed `select_title_to_id` to `select_title_to_array` to better reflect array-based format
118
+ - Maintains consistency with Attio API's array-based select field expectations
119
+
120
+ - **Tool alias system refactoring** (#1041) - Simplified and improved maintainability of the tool alias system
121
+ - Created `src/constants/tool-names.ts` with type-safe tool name constants and `ToolName` type
122
+ - Refactored `src/config/tool-aliases.ts` to use data-driven pattern-based alias generation
123
+ - Created `test/utils/tool-assertions.ts` with reusable assertion helpers for tool validation
124
+ - Refactored consistency tests to use assertion helpers, improving readability and reducing duplication
125
+ - All 29 aliases remain fully functional with 100% backward compatibility
126
+
127
+ - **MCP-compliant tool naming** (#1039) - All universal tools now use `snake_case`, verb-first naming
128
+ - Universal search/metadata tools: `records_search` → `search_records`, `records_get_details` → `get_record_details`, etc. (12 tools)
129
+ - CRUD tools: `create-record` → `create_record`, `update-record` → `update_record`, `delete-record` → `delete_record`
130
+ - Note tools: `create-note` → `create_note`, `list-notes` → `list_notes`
131
+ - Debug tool: `smithery-debug-config` → `smithery_debug_config`
132
+ - Tool descriptions now use natural language sentences instead of pipe-separated labels
133
+ - Aligns with MCP ecosystem standards (Desktop Commander, SEP-986, official MCP docs)
134
+ - Old names continue to work via dual alias support (both old `noun_verb` and `kebab-case` formats)
135
+ - See `docs/MIGRATION-GUIDE.md` for complete migration table
136
+
137
+ - **Refactored UniversalUpdateService** (#984) - Reduced from 831 to 691 lines (-17%) by extracting focused modules
138
+ - Created MetadataResolver for centralized metadata fetching (eliminates 40-60% duplicate API calls)
139
+ - Created UpdateOrchestrator for clean strategy dispatch separation
140
+ - Created FieldValidationHandler for validation with display name resolution
141
+ - Created FieldPersistenceHandler for post-update verification
142
+
143
+ - **Unified verification API** (#984) - Single entry point for field persistence verification
144
+ - UniversalUpdateService now routes through FieldPersistenceHandler.verifyPersistence
145
+ - Eliminates duplicate semantic filtering logic (47 lines removed)
146
+ - FieldPersistenceHandler.verifyPersistence now accepts optional actualRecord parameter
147
+ - Verification results surfaced in UpdateMetadata.fieldVerification (verified status + discrepancies)
148
+ - Renamed ValidationResult → UpdateMetadata for clarity (3 competing interfaces reduced to distinct purposes)
149
+
150
+ - **Standardized environment variables** (#984) - Consistent verification configuration
151
+ - UpdateValidation now uses ENABLE_FIELD_VERIFICATION (deprecated SKIP_FIELD_VERIFICATION)
152
+ - Both variables supported for backward compatibility with deprecation notice
153
+
154
+ - **Improved MetadataResolver error handling** (#984, #1006) - Better error handling for critical failures
155
+ - Re-throws critical authentication errors (401, 403, Unauthorized, Forbidden)
156
+ - Re-throws schema validation errors for immediate failure visibility
157
+ - Graceful degradation with empty metadata for non-critical transient errors
158
+ - Prevents silent masking of authentication and validation failures
159
+
160
+ - **Consolidated metadata fetching** (#984, #1006) - Single API call per resource type per request
161
+ - MetadataResolver provides single source of truth for attribute metadata
162
+ - Value transformer receives metadata via context to avoid duplicate fetch
163
+ - Reduces API calls and improves performance
164
+
165
+ - **Extended display name resolution** (#984) - User-friendly field names now work in create/update operations
166
+ - Can use "Deal stage" instead of "stage" in all operations (not just attribute_options)
167
+ - FieldValidationHandler automatically resolves display names before validation
168
+ - Integrated into both UniversalCreateService and UniversalUpdateService
169
+
170
+ - **Added TTL to metadata caches** (#984) - All metadata caches now expire after 5 minutes
171
+ - Value transformer migrated to CachingService with DEFAULT_ATTRIBUTES_CACHE_TTL
172
+ - Status transformer uses timestamp-based expiration with lazy eviction
173
+ - Prevents stale data while maintaining performance benefits
174
+
175
+ - **Enhanced attribute error messages** (#975) - Better guidance when API requests fail
176
+ - Levenshtein distance suggestions for misspelled attribute names (threshold ≤3 edits)
177
+ - Field alias mapping converts common mistakes automatically (`linkedin_url` → `linkedin`)
178
+ - Select/status errors now show valid workspace-specific options
179
+ - Error messages include `records_discover_attributes` hint for discovery
180
+
181
+ - **Expanded valid field lists** (#975) - Validators now accept more standard Attio attributes
182
+ - Companies: `team_size`, `founded_at`, `headquarters`, `crunchbase`, `instagram`, `angellist`, etc.
183
+ - People: `primary_email_address`, `primary_phone_number`, `avatar_url`, `timezone`, `instagram`, etc.
184
+
185
+ - **Location field auto-normalization** (#987) - Incomplete location objects now auto-fill missing fields
186
+ - Attio requires all 10 location fields (`line_1`-`line_4`, `locality`, `region`, `postcode`, `country_code`, `latitude`, `longitude`) even if null
187
+ - Transformer auto-fills missing fields with `null` to prevent validation errors
188
+ - Common aliases supported: `street`→`line_1`, `city`→`locality`, `state`→`region`, `zip`→`postcode`, `lat`→`latitude`
189
+
190
+ - **Refactored select array handling** (#1030) - Normalized select array data structures for consistency
191
+
192
+ - **Removed unused normalizeLocation function** (#1030) - Cleaned up unused code to reduce technical debt
193
+
194
+ - **Error handling refactoring** (#1001) - Extracted validation enhancers for improved code organization and maintainability
195
+ - Extracted required-fields enhancer (Step 1/6)
196
+ - Extracted uniqueness enhancer (Step 2/6)
197
+ - Extracted attribute-not-found enhancer (Step 3/6)
198
+ - Extracted final 3 enhancers (Steps 4-6/6)
199
+
200
+ ### Fixed
201
+
202
+ - **Note content line breaks preserved** (#1052) - Fixed line breaks being stripped from note content during sanitization
203
+ - Preserved leading indentation for nested Markdown (bullet lists, code blocks)
204
+ - Added `sanitizeMultilineString()` for content-heavy fields while maintaining XSS security
205
+ - Supports all multiline fields: content, content_markdown, content_plaintext, description, body, notes
206
+ - Enhanced `create_note` tool description with markdown formatting guidance
207
+ - **Action**: Re-generate workspace schema skills to get updated note formatting documentation
208
+
209
+ - **People search results display** (#1051) - Fixed people search showing "Unnamed" instead of actual names
210
+ - Updated `getAttributeValue()` to handle `personal-name` attributes with `full_name`, `first_name`, `last_name` fields
211
+ - Added fallback support for `formatted` attribute values
212
+ - Maintains backward compatibility with standard `value` attributes
213
+
214
+ - **Select field persistence** (#1045) - Fixed silent API failures where select field updates returned 200 OK but didn't persist
215
+ - Fixed `detectFieldType()` to return `'array'` for all select fields (single and multi-select)
216
+ - Fixed select-transformer to use `["title"]` format instead of `["uuid"]` format (Attio silently rejects UUID arrays)
217
+ - Added E2E test validating real API persistence with select fields
218
+ - Resolves type mismatch validation errors and false-positive update confirmations
219
+
220
+ - **Deal creation** (#1043) - Accept stage titles + UTM fields and improve validation/error surfacing
221
+
222
+ - **Field persistence false warnings for status fields** (#995, #1011) - Resolved spurious warnings when updating status field values
223
+ - Fixed unwrapArrayValue to properly handle both status and title field properties
224
+ - Improved isStatusField detection to recognize stage and status field variations
225
+ - Enhanced test coverage for status field update scenarios
226
+ - Resolves confusing warnings after successful updates (e.g., "Sales Qualified" stage updates)
227
+
228
+ - **Enhance uniqueness constraint violation errors** (#990, #1000) - Better error messages for duplicate records
229
+ - Searches for conflicting records and shows field name, conflicting value, and existing record ID
230
+ - Provides actionable options: update existing, view details, or use different value
231
+ - Integrated into handleCreateError() for companies and people records
232
+
233
+ - **Complex attribute validation** (#991) - Clearer validation and error messages for location, personal-name, and phone-number fields
234
+ - Pre-validates complex types with actionable errors and examples before Attio API calls
235
+ - Auto-fills missing location fields with nulls; enforces phone_number/original_phone_number and non-empty names
236
+ - Enhanced CRUD error handling surfaces Attio validation_errors and select/status option hints
237
+
238
+ - **Record-reference fields now auto-format** (#997) - Automatic transformation to Attio's required format
239
+ - String IDs like `company: "uuid"` are auto-converted to `[{target_object: "companies", target_record_id: "uuid"}]`
240
+ - Fixes 400 errors when linking people to companies or associating people with deals
241
+ - Supports legacy formats: `{record_id: "uuid"}`, `{id: "uuid"}`, incomplete objects
242
+ - Target object inferred from field name (`company`→`companies`, `associated_people`→`people`)
243
+
244
+ - **Multi-select fields now accept single values** (#992) - Automatic array wrapping for multi-select attributes
245
+ - Single values like `lead_type: "Inbound"` are now auto-converted to `["Inbound"]`
246
+ - Works for all custom multi-select fields (e.g., `categories`, `inbound_outbound`, `regions`)
247
+ - Fixes "Multi-select attribute expects an array" errors when using natural input format
248
+ - Detects multi-select via Attio's `is_multiselect` flag (not just type name)
249
+
250
+ - **`records_get_attribute_options` now returns status options** (#987) - Fixed empty results for status attributes
251
+ - Select endpoint returning empty `[]` now falls back to status endpoint
252
+ - `deals.stage` and similar status attributes now return correct options
253
+ - `attributeType` correctly identifies `'status'` vs `'select'` based on successful endpoint
254
+ - Error messages include both select and status error details when both fail
255
+
256
+ - **Company location updates now work correctly** (#987) - Fixed "Expected an object, but got string" error
257
+ - `processFieldValue` now preserves object-type fields (like `primary_location`) instead of converting to `[object Object]`
258
+ - `formatAttributeValue` normalizes location objects with all 10 required Attio fields (nulls where missing)
259
+ - Both company-specific (`updateCompany`) and universal (`update-record`) flows now work
260
+
261
+ - **Claude PR review dynamic import detection** (#1002, #1003) - Ring 1 scope now includes dynamically imported modules
262
+ - Adds regex patterns for dynamic imports (`await import(...)`) in scope generator
263
+ - Captures both relative (`../../path`) and `@/` alias dynamic imports
264
+ - Pre-computes alias paths from full repo and outputs alias-resolutions.json
265
+ - Adds prompt hardening to prevent "missing file" claims from sparse checkout limitations
266
+ - Fixes false positive "missing dependency" errors when PR files use `await import('@/...')` or `await import('./...')`
267
+
268
+ - **PR review workflow path alias detection** (#977) - Fixed false positive "missing file" errors
269
+ - Ring scope generator now detects `@/...` path alias imports (not just relative imports)
270
+ - Resolves `@/services/utils/foo.js` to `src/services/utils/foo.ts` for Ring 1 inclusion
271
+
272
+ - **Daily changelog workflow authentication** (#1005) - Added claude_args with required tool permissions
273
+ - Explicitly permits Read, Edit, Write for file operations
274
+ - Allows Bash(git:\*) for branch/commit/push operations
275
+ - Allows Bash(gh pr list:_), Bash(gh pr create:_) for PR operations
276
+ - Allows Bash(date:\*) for branch naming
277
+ - Ensures gh CLI has authentication inside Claude's Bash environment
278
+
279
+ - **SDK dependency pinning** (#1025, #1026) - Pinned @modelcontextprotocol/sdk to ~1.24.0 to ensure stability
19
280
 
20
281
  ### Deprecated
21
282
 
283
+ - **Old universal tool names** (#1039) - Removal: v2.0.0 (Q1 2026)
284
+ - Old noun-verb snake_case format (e.g., `records_search`, `records_get_details`)
285
+ - Old kebab-case format (e.g., `create-record`, `update-record`, `create-note`)
286
+ - Use new verb-first snake_case names (e.g., `search_records`, `create_record`, `create_note`)
287
+ - Dual aliases provide backward compatibility with deprecation warnings
288
+ - Migration guide available in `docs/MIGRATION-GUIDE.md`
289
+
290
+ - **Legacy resource-specific tools** (#1022) - Removal: v2.0.0 (Q1 2026)
291
+ - All resource-specific tools (`search-companies`, `create-person`, etc.) are deprecated
292
+ - Use universal tools instead (`search_records`, `create_record`, etc.)
293
+ - Legacy tools accessible via `DISABLE_UNIVERSAL_TOOLS=true` but emit deprecation warnings
294
+ - See `docs/MIGRATION-GUIDE.md` for migration guide
295
+
22
296
  ## [1.3.6] - 2025-12-03
23
297
 
24
298
  Documentation and testing infrastructure improvements for remote deployment support.
@@ -625,7 +899,14 @@ Users upgrading from v0.1.x should note:
625
899
  - Troubleshooting guides
626
900
  - Development and contribution guidelines
627
901
 
628
- [Unreleased]: https://github.com/kesslerio/attio-mcp-server/compare/v1.2.0...HEAD
902
+ [Unreleased]: https://github.com/kesslerio/attio-mcp-server/compare/v1.4.1...HEAD
903
+ [1.4.1]: https://github.com/kesslerio/attio-mcp-server/compare/v1.4.0...v1.4.1
904
+ [1.4.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.3.6...v1.4.0
905
+ [1.3.6]: https://github.com/kesslerio/attio-mcp-server/compare/v1.3.5...v1.3.6
906
+ [1.3.5]: https://github.com/kesslerio/attio-mcp-server/compare/v1.3.0...v1.3.5
907
+ [1.3.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.2.2...v1.3.0
908
+ [1.2.2]: https://github.com/kesslerio/attio-mcp-server/compare/v1.2.1...v1.2.2
909
+ [1.2.1]: https://github.com/kesslerio/attio-mcp-server/compare/v1.2.0...v1.2.1
629
910
  [1.2.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.1.10...v1.2.0
630
911
  [1.1.10]: https://github.com/kesslerio/attio-mcp-server/compare/v1.1.0...v1.1.10
631
912
  [1.1.0]: https://github.com/kesslerio/attio-mcp-server/compare/v1.0.0...v1.1.0