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