attio-mcp 1.1.10 → 1.2.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 (69) hide show
  1. package/CHANGELOG.md +108 -1
  2. package/README.md +14 -8
  3. package/dist/api/attribute-types.d.ts.map +1 -1
  4. package/dist/api/attribute-types.js +7 -2
  5. package/dist/api/attribute-types.js.map +1 -1
  6. package/dist/api/operations/lists.d.ts.map +1 -1
  7. package/dist/api/operations/lists.js +4 -3
  8. package/dist/api/operations/lists.js.map +1 -1
  9. package/dist/api/operations/search.d.ts.map +1 -1
  10. package/dist/api/operations/search.js +1 -1
  11. package/dist/api/operations/search.js.map +1 -1
  12. package/dist/config/deal-defaults.d.ts +3 -0
  13. package/dist/config/deal-defaults.d.ts.map +1 -1
  14. package/dist/config/deal-defaults.js +35 -31
  15. package/dist/config/deal-defaults.js.map +1 -1
  16. package/dist/handlers/tool-configs/universal/core/index.d.ts +22 -2
  17. package/dist/handlers/tool-configs/universal/core/index.d.ts.map +1 -1
  18. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts +22 -2
  19. package/dist/handlers/tool-configs/universal/core/search-operations.d.ts.map +1 -1
  20. package/dist/handlers/tool-configs/universal/core/search-operations.js +1 -1
  21. package/dist/handlers/tool-configs/universal/core/search-operations.js.map +1 -1
  22. package/dist/handlers/tool-configs/universal/index.d.ts +22 -2
  23. package/dist/handlers/tool-configs/universal/index.d.ts.map +1 -1
  24. package/dist/handlers/tool-configs/universal/operations/index.js +2 -2
  25. package/dist/handlers/tool-configs/universal/operations/index.js.map +1 -1
  26. package/dist/handlers/tool-configs/universal/schemas/advanced-schemas.d.ts.map +1 -1
  27. package/dist/handlers/tool-configs/universal/schemas/advanced-schemas.js +1 -0
  28. package/dist/handlers/tool-configs/universal/schemas/advanced-schemas.js.map +1 -1
  29. package/dist/handlers/tool-configs/universal/schemas/common/properties.js +1 -1
  30. package/dist/handlers/tool-configs/universal/schemas/common/properties.js.map +1 -1
  31. package/dist/handlers/tool-configs/universal/schemas/core-schemas.d.ts +22 -2
  32. package/dist/handlers/tool-configs/universal/schemas/core-schemas.d.ts.map +1 -1
  33. package/dist/handlers/tool-configs/universal/schemas/core-schemas.js +65 -1
  34. package/dist/handlers/tool-configs/universal/schemas/core-schemas.js.map +1 -1
  35. package/dist/handlers/tools/dispatcher/core.d.ts.map +1 -1
  36. package/dist/handlers/tools/dispatcher/core.js +13 -0
  37. package/dist/handlers/tools/dispatcher/core.js.map +1 -1
  38. package/dist/handlers/tools/registry.d.ts +22 -2
  39. package/dist/handlers/tools/registry.d.ts.map +1 -1
  40. package/dist/prompts/v1/create-task.v1.d.ts +1 -1
  41. package/dist/prompts/v1/pipeline-health.v1.d.ts +2 -2
  42. package/dist/server/createServer.d.ts.map +1 -1
  43. package/dist/server/createServer.js +1 -2
  44. package/dist/server/createServer.js.map +1 -1
  45. package/dist/services/workspace-member-resolver.d.ts +55 -0
  46. package/dist/services/workspace-member-resolver.d.ts.map +1 -0
  47. package/dist/services/workspace-member-resolver.js +146 -0
  48. package/dist/services/workspace-member-resolver.js.map +1 -0
  49. package/dist/utils/client-resolver.d.ts +4 -1
  50. package/dist/utils/client-resolver.d.ts.map +1 -1
  51. package/dist/utils/client-resolver.js +57 -33
  52. package/dist/utils/client-resolver.js.map +1 -1
  53. package/dist/utils/filters/reference-attribute-helper.d.ts +69 -0
  54. package/dist/utils/filters/reference-attribute-helper.d.ts.map +1 -0
  55. package/dist/utils/filters/reference-attribute-helper.js +262 -0
  56. package/dist/utils/filters/reference-attribute-helper.js.map +1 -0
  57. package/dist/utils/filters/translators.d.ts +3 -67
  58. package/dist/utils/filters/translators.d.ts.map +1 -1
  59. package/dist/utils/filters/translators.js +208 -26
  60. package/dist/utils/filters/translators.js.map +1 -1
  61. package/dist/utils/filters/value-validators.d.ts +37 -0
  62. package/dist/utils/filters/value-validators.d.ts.map +1 -0
  63. package/dist/utils/filters/value-validators.js +107 -0
  64. package/dist/utils/filters/value-validators.js.map +1 -0
  65. package/dist/utils/ttl-cache.d.ts +69 -0
  66. package/dist/utils/ttl-cache.d.ts.map +1 -0
  67. package/dist/utils/ttl-cache.js +113 -0
  68. package/dist/utils/ttl-cache.js.map +1 -0
  69. package/package.json +2 -2
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Simple TTL (Time-To-Live) Cache Implementation
3
+ *
4
+ * Provides automatic expiration of cached entries after a specified duration.
5
+ * Used for workspace-level caching of attribute metadata to reduce API calls
6
+ * while preventing stale data issues.
7
+ */
8
+ export interface TTLCacheEntry<T> {
9
+ value: T;
10
+ expiresAt: number;
11
+ }
12
+ export declare class TTLCache<K, V> {
13
+ private cache;
14
+ private readonly ttlMs;
15
+ private cleanupInterval?;
16
+ /**
17
+ * Creates a new TTL cache
18
+ *
19
+ * @param ttlMs - Time-to-live in milliseconds (default: 15 minutes)
20
+ * @param cleanupIntervalMs - How often to check for expired entries (default: 5 minutes)
21
+ */
22
+ constructor(ttlMs?: number, cleanupIntervalMs?: number);
23
+ /**
24
+ * Gets a value from the cache
25
+ *
26
+ * @param key - The cache key
27
+ * @returns The cached value, or undefined if not found or expired
28
+ */
29
+ get(key: K): V | undefined;
30
+ /**
31
+ * Sets a value in the cache with TTL
32
+ *
33
+ * @param key - The cache key
34
+ * @param value - The value to cache
35
+ */
36
+ set(key: K, value: V): void;
37
+ /**
38
+ * Checks if a key exists and is not expired
39
+ *
40
+ * @param key - The cache key
41
+ * @returns True if the key exists and is not expired
42
+ */
43
+ has(key: K): boolean;
44
+ /**
45
+ * Removes a specific key from the cache
46
+ *
47
+ * @param key - The cache key to remove
48
+ */
49
+ delete(key: K): boolean;
50
+ /**
51
+ * Clears all entries from the cache
52
+ */
53
+ clear(): void;
54
+ /**
55
+ * Returns the number of entries in the cache (including expired ones)
56
+ */
57
+ get size(): number;
58
+ /**
59
+ * Removes expired entries from the cache
60
+ * Called automatically by cleanup interval
61
+ */
62
+ private cleanup;
63
+ /**
64
+ * Stops the cleanup interval
65
+ * Should be called when the cache is no longer needed
66
+ */
67
+ destroy(): void;
68
+ }
69
+ //# sourceMappingURL=ttl-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttl-cache.d.ts","sourceRoot":"","sources":["../../src/utils/ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC;;;;;OAKG;gBAED,KAAK,GAAE,MAAuB,EAC9B,iBAAiB,GAAE,MAAsB;IAgB3C;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAgB1B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAO3B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,OAAO,CAAC,OAAO;IASf;;;OAGG;IACH,OAAO,IAAI,IAAI;CAOhB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Simple TTL (Time-To-Live) Cache Implementation
3
+ *
4
+ * Provides automatic expiration of cached entries after a specified duration.
5
+ * Used for workspace-level caching of attribute metadata to reduce API calls
6
+ * while preventing stale data issues.
7
+ */
8
+ export class TTLCache {
9
+ cache;
10
+ ttlMs;
11
+ cleanupInterval;
12
+ /**
13
+ * Creates a new TTL cache
14
+ *
15
+ * @param ttlMs - Time-to-live in milliseconds (default: 15 minutes)
16
+ * @param cleanupIntervalMs - How often to check for expired entries (default: 5 minutes)
17
+ */
18
+ constructor(ttlMs = 15 * 60 * 1000, cleanupIntervalMs = 5 * 60 * 1000) {
19
+ this.cache = new Map();
20
+ this.ttlMs = ttlMs;
21
+ // Start periodic cleanup
22
+ this.cleanupInterval = setInterval(() => {
23
+ this.cleanup();
24
+ }, cleanupIntervalMs);
25
+ // Ensure cleanup interval doesn't keep process alive
26
+ if (this.cleanupInterval.unref) {
27
+ this.cleanupInterval.unref();
28
+ }
29
+ }
30
+ /**
31
+ * Gets a value from the cache
32
+ *
33
+ * @param key - The cache key
34
+ * @returns The cached value, or undefined if not found or expired
35
+ */
36
+ get(key) {
37
+ const entry = this.cache.get(key);
38
+ if (!entry) {
39
+ return undefined;
40
+ }
41
+ // Check if expired
42
+ if (Date.now() > entry.expiresAt) {
43
+ this.cache.delete(key);
44
+ return undefined;
45
+ }
46
+ return entry.value;
47
+ }
48
+ /**
49
+ * Sets a value in the cache with TTL
50
+ *
51
+ * @param key - The cache key
52
+ * @param value - The value to cache
53
+ */
54
+ set(key, value) {
55
+ this.cache.set(key, {
56
+ value,
57
+ expiresAt: Date.now() + this.ttlMs,
58
+ });
59
+ }
60
+ /**
61
+ * Checks if a key exists and is not expired
62
+ *
63
+ * @param key - The cache key
64
+ * @returns True if the key exists and is not expired
65
+ */
66
+ has(key) {
67
+ return this.get(key) !== undefined;
68
+ }
69
+ /**
70
+ * Removes a specific key from the cache
71
+ *
72
+ * @param key - The cache key to remove
73
+ */
74
+ delete(key) {
75
+ return this.cache.delete(key);
76
+ }
77
+ /**
78
+ * Clears all entries from the cache
79
+ */
80
+ clear() {
81
+ this.cache.clear();
82
+ }
83
+ /**
84
+ * Returns the number of entries in the cache (including expired ones)
85
+ */
86
+ get size() {
87
+ return this.cache.size;
88
+ }
89
+ /**
90
+ * Removes expired entries from the cache
91
+ * Called automatically by cleanup interval
92
+ */
93
+ cleanup() {
94
+ const now = Date.now();
95
+ for (const [key, entry] of this.cache.entries()) {
96
+ if (now > entry.expiresAt) {
97
+ this.cache.delete(key);
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Stops the cleanup interval
103
+ * Should be called when the cache is no longer needed
104
+ */
105
+ destroy() {
106
+ if (this.cleanupInterval) {
107
+ clearInterval(this.cleanupInterval);
108
+ this.cleanupInterval = undefined;
109
+ }
110
+ this.clear();
111
+ }
112
+ }
113
+ //# sourceMappingURL=ttl-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ttl-cache.js","sourceRoot":"","sources":["../../src/utils/ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,OAAO,QAAQ;IACX,KAAK,CAA2B;IACvB,KAAK,CAAS;IACvB,eAAe,CAAkB;IAEzC;;;;;OAKG;IACH,YACE,QAAgB,EAAE,GAAG,EAAE,GAAG,IAAI,EAC9B,oBAA4B,CAAC,GAAG,EAAE,GAAG,IAAI;QAEzC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,yBAAyB;QACzB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAEtB,qDAAqD;QACrD,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAM;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;YAClB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;OAGG;IACK,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "attio-mcp",
3
- "version": "1.1.10",
3
+ "version": "1.2.1",
4
4
  "description": "AI-powered access to Attio CRM. Manage contacts, companies, deals, tasks, and notes. Search records, update pipelines, and automate workflows for sales and GTM teams.",
5
5
  "mcpName": "io.github.kesslerio/attio-mcp-server",
6
6
  "main": "dist/smithery.js",
@@ -202,7 +202,7 @@
202
202
  "handlebars": "^4.7.8",
203
203
  "libphonenumber-js": "^1.12.16",
204
204
  "lru-cache": "^11.2.2",
205
- "ora": "^7.0.1",
205
+ "ora": "^9.0.0",
206
206
  "safe-stable-stringify": "^2.5.0",
207
207
  "sanitize-html": "^2.17.0",
208
208
  "user": "^0.0.0",