@rashidazarang/airtable-mcp 2.1.0 → 2.1.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 (152) hide show
  1. package/package.json +10 -1
  2. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -173
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  4. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  5. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -209
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  7. package/.github/ISSUE_TEMPLATE/security-report.yml +0 -216
  8. package/.github/pull_request_template.md +0 -245
  9. package/.github/workflows/ci-cd.yml +0 -408
  10. package/.github/workflows/security-audit.yml +0 -316
  11. package/API_DOCUMENTATION.md +0 -897
  12. package/CAPABILITY_REPORT.md +0 -118
  13. package/CLAUDE_INTEGRATION.md +0 -96
  14. package/CODE_OF_CONDUCT.md +0 -181
  15. package/CONTRIBUTING.md +0 -81
  16. package/DEVELOPMENT.md +0 -190
  17. package/Dockerfile +0 -39
  18. package/Dockerfile.node +0 -20
  19. package/Dockerfile.production +0 -127
  20. package/IMPROVEMENT_PROPOSAL.md +0 -371
  21. package/INSTALLATION.md +0 -183
  22. package/ISSUE_RESPONSES.md +0 -171
  23. package/MCP_REVIEW_SUMMARY.md +0 -142
  24. package/QUICK_START.md +0 -60
  25. package/RELEASE_NOTES_v1.2.0.md +0 -50
  26. package/RELEASE_NOTES_v1.2.1.md +0 -40
  27. package/RELEASE_NOTES_v1.2.2.md +0 -48
  28. package/RELEASE_NOTES_v1.2.3.md +0 -105
  29. package/RELEASE_NOTES_v1.2.4.md +0 -60
  30. package/RELEASE_NOTES_v1.4.0.md +0 -104
  31. package/RELEASE_NOTES_v1.5.0.md +0 -185
  32. package/RELEASE_NOTES_v1.6.0.md +0 -248
  33. package/SECURITY_NOTICE.md +0 -40
  34. package/airtable-clipper/CHANGELOG.md +0 -198
  35. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +0 -343
  36. package/airtable-clipper/LAUNCH_STRATEGY.md +0 -495
  37. package/airtable-clipper/LICENSE +0 -21
  38. package/airtable-clipper/OAUTH_SETUP.md +0 -51
  39. package/airtable-clipper/PRIVACY_POLICY.md +0 -187
  40. package/airtable-clipper/README.md +0 -575
  41. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +0 -273
  42. package/airtable-clipper/build.sh +0 -85
  43. package/airtable-clipper/docs/QUICK_START.md +0 -99
  44. package/airtable-clipper/docs/SETUP.md +0 -291
  45. package/airtable-clipper/extension/background.js +0 -337
  46. package/airtable-clipper/extension/base-setup.html +0 -324
  47. package/airtable-clipper/extension/base-setup.js +0 -471
  48. package/airtable-clipper/extension/content.js +0 -771
  49. package/airtable-clipper/extension/icons/README.md +0 -69
  50. package/airtable-clipper/extension/icons/icon-16.png +0 -3
  51. package/airtable-clipper/extension/manifest.json +0 -73
  52. package/airtable-clipper/extension/popup.html +0 -144
  53. package/airtable-clipper/extension/popup.js +0 -475
  54. package/airtable-clipper/extension/styles/content.css +0 -229
  55. package/airtable-clipper/extension/styles/popup.css +0 -477
  56. package/airtable-clipper/privacy-policy.md +0 -63
  57. package/airtable-clipper/releases/v1.0.0/background.js +0 -337
  58. package/airtable-clipper/releases/v1.0.0/base-setup.html +0 -324
  59. package/airtable-clipper/releases/v1.0.0/base-setup.js +0 -471
  60. package/airtable-clipper/releases/v1.0.0/content.js +0 -771
  61. package/airtable-clipper/releases/v1.0.0/icons/README.md +0 -69
  62. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +0 -2
  63. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +0 -3
  64. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +0 -2
  65. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +0 -2
  66. package/airtable-clipper/releases/v1.0.0/manifest.json +0 -73
  67. package/airtable-clipper/releases/v1.0.0/popup.html +0 -144
  68. package/airtable-clipper/releases/v1.0.0/popup.js +0 -475
  69. package/airtable-clipper/releases/v1.0.0/sidepanel.html +0 -25
  70. package/airtable-clipper/releases/v1.0.0/styles/content.css +0 -229
  71. package/airtable-clipper/releases/v1.0.0/styles/popup.css +0 -477
  72. package/airtable-clipper/releases/v1.0.1/background.js +0 -337
  73. package/airtable-clipper/releases/v1.0.1/base-setup.html +0 -324
  74. package/airtable-clipper/releases/v1.0.1/base-setup.js +0 -471
  75. package/airtable-clipper/releases/v1.0.1/content.js +0 -771
  76. package/airtable-clipper/releases/v1.0.1/icons/README.md +0 -69
  77. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +0 -2
  78. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +0 -3
  79. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +0 -2
  80. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +0 -2
  81. package/airtable-clipper/releases/v1.0.1/manifest.json +0 -70
  82. package/airtable-clipper/releases/v1.0.1/popup.html +0 -157
  83. package/airtable-clipper/releases/v1.0.1/popup.js +0 -562
  84. package/airtable-clipper/releases/v1.0.1/sidepanel.html +0 -25
  85. package/airtable-clipper/releases/v1.0.1/styles/content.css +0 -229
  86. package/airtable-clipper/releases/v1.0.1/styles/popup.css +0 -647
  87. package/airtable-clipper/releases/v1.0.2/background.js +0 -337
  88. package/airtable-clipper/releases/v1.0.2/base-setup.html +0 -324
  89. package/airtable-clipper/releases/v1.0.2/base-setup.js +0 -471
  90. package/airtable-clipper/releases/v1.0.2/content.js +0 -771
  91. package/airtable-clipper/releases/v1.0.2/icons/README.md +0 -69
  92. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +0 -2
  93. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +0 -3
  94. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +0 -2
  95. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +0 -2
  96. package/airtable-clipper/releases/v1.0.2/manifest.json +0 -62
  97. package/airtable-clipper/releases/v1.0.2/popup.html +0 -157
  98. package/airtable-clipper/releases/v1.0.2/popup.js +0 -567
  99. package/airtable-clipper/releases/v1.0.2/sidepanel.html +0 -25
  100. package/airtable-clipper/releases/v1.0.2/styles/content.css +0 -229
  101. package/airtable-clipper/releases/v1.0.2/styles/popup.css +0 -647
  102. package/airtable-clipper/terms-of-service.md +0 -124
  103. package/airtable-clipper/test-credentials.md +0 -61
  104. package/airtable-clipper/test-extension/background.js +0 -337
  105. package/airtable-clipper/test-extension/base-setup.html +0 -324
  106. package/airtable-clipper/test-extension/base-setup.js +0 -471
  107. package/airtable-clipper/test-extension/content.js +0 -873
  108. package/airtable-clipper/test-extension/icons/README.md +0 -69
  109. package/airtable-clipper/test-extension/icons/icon-128.png +0 -2
  110. package/airtable-clipper/test-extension/icons/icon-16.png +0 -3
  111. package/airtable-clipper/test-extension/icons/icon-32.png +0 -2
  112. package/airtable-clipper/test-extension/icons/icon-48.png +0 -2
  113. package/airtable-clipper/test-extension/manifest.json +0 -72
  114. package/airtable-clipper/test-extension/popup.html +0 -274
  115. package/airtable-clipper/test-extension/popup.js +0 -729
  116. package/airtable-clipper/test-extension/sidepanel.html +0 -25
  117. package/airtable-clipper/test-extension/styles/content.css +0 -229
  118. package/airtable-clipper/test-extension/styles/popup.css +0 -794
  119. package/airtable_mcp/__init__.py +0 -5
  120. package/airtable_mcp/src/server.py +0 -329
  121. package/airtable_mcp_v2.js +0 -1505
  122. package/airtable_mcp_v2_oauth.js +0 -1048
  123. package/airtable_mcp_v3_advanced.js +0 -1161
  124. package/cleanup.sh +0 -71
  125. package/docker-compose.production.yml +0 -366
  126. package/helm/airtable-mcp/Chart.yaml +0 -122
  127. package/helm/airtable-mcp/values.yaml +0 -538
  128. package/index.js +0 -179
  129. package/inspector.py +0 -148
  130. package/inspector_server.py +0 -337
  131. package/k8s/deployment.yaml +0 -402
  132. package/k8s/namespace.yaml +0 -108
  133. package/k8s/service.yaml +0 -194
  134. package/monitoring/alerts.yml +0 -289
  135. package/monitoring/prometheus.yml +0 -224
  136. package/publish-steps.txt +0 -27
  137. package/quick_test.sh +0 -30
  138. package/requirements.txt +0 -10
  139. package/setup.py +0 -29
  140. package/simple_airtable_server.py +0 -151
  141. package/smithery.yaml +0 -45
  142. package/test_all_features.sh +0 -146
  143. package/test_all_operations.sh +0 -120
  144. package/test_client.py +0 -70
  145. package/test_enhanced_features.js +0 -389
  146. package/test_mcp_comprehensive.js +0 -163
  147. package/test_mock_server.js +0 -180
  148. package/test_v1.4.0_final.sh +0 -131
  149. package/test_v1.5.0_comprehensive.sh +0 -96
  150. package/test_v1.5.0_final.sh +0 -224
  151. package/test_v1.6.0_comprehensive.sh +0 -187
  152. package/test_webhooks.sh +0 -105
@@ -1,477 +0,0 @@
1
- /* Airtable Clipper Popup Styles */
2
-
3
- * {
4
- box-sizing: border-box;
5
- margin: 0;
6
- padding: 0;
7
- }
8
-
9
- body {
10
- width: 320px;
11
- min-height: 400px;
12
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
13
- font-size: 14px;
14
- line-height: 1.5;
15
- color: #1f2937;
16
- background-color: #ffffff;
17
- }
18
-
19
- /* Header */
20
- .header {
21
- display: flex;
22
- justify-content: space-between;
23
- align-items: center;
24
- padding: 16px;
25
- border-bottom: 1px solid #e5e7eb;
26
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
27
- color: white;
28
- }
29
-
30
- .logo {
31
- display: flex;
32
- align-items: center;
33
- gap: 8px;
34
- }
35
-
36
- .logo-icon {
37
- width: 24px;
38
- height: 24px;
39
- }
40
-
41
- .logo h1 {
42
- font-size: 16px;
43
- font-weight: 600;
44
- }
45
-
46
- .connection-status {
47
- display: flex;
48
- align-items: center;
49
- gap: 6px;
50
- font-size: 12px;
51
- }
52
-
53
- .status-dot {
54
- width: 8px;
55
- height: 8px;
56
- border-radius: 50%;
57
- background-color: #ef4444;
58
- }
59
-
60
- .status-dot.connected {
61
- background-color: #10b981;
62
- }
63
-
64
- .status-dot.connecting {
65
- background-color: #f59e0b;
66
- animation: pulse 2s infinite;
67
- }
68
-
69
- @keyframes pulse {
70
- 0%, 100% { opacity: 1; }
71
- 50% { opacity: 0.5; }
72
- }
73
-
74
- /* Quick Actions */
75
- .quick-actions {
76
- padding: 16px;
77
- }
78
-
79
- .action-btn {
80
- display: flex;
81
- align-items: center;
82
- width: 100%;
83
- padding: 12px;
84
- border: none;
85
- border-radius: 8px;
86
- cursor: pointer;
87
- transition: all 0.2s ease;
88
- font-size: 14px;
89
- font-weight: 500;
90
- margin-bottom: 8px;
91
- }
92
-
93
- .action-btn.primary {
94
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
95
- color: white;
96
- box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3);
97
- }
98
-
99
- .action-btn.primary:hover {
100
- transform: translateY(-1px);
101
- box-shadow: 0 4px 8px rgba(102, 126, 234, 0.4);
102
- }
103
-
104
- .action-btn.secondary {
105
- background-color: #f3f4f6;
106
- color: #374151;
107
- border: 1px solid #d1d5db;
108
- }
109
-
110
- .action-btn.secondary:hover {
111
- background-color: #e5e7eb;
112
- }
113
-
114
- .action-btn:disabled {
115
- opacity: 0.5;
116
- cursor: not-allowed;
117
- transform: none !important;
118
- }
119
-
120
- .btn-icon {
121
- font-size: 18px;
122
- margin-right: 10px;
123
- }
124
-
125
- .btn-content {
126
- display: flex;
127
- flex-direction: column;
128
- align-items: flex-start;
129
- flex: 1;
130
- }
131
-
132
- .btn-text {
133
- font-weight: 500;
134
- }
135
-
136
- .btn-subtext {
137
- font-size: 12px;
138
- opacity: 0.8;
139
- margin-top: 2px;
140
- }
141
-
142
- .action-row {
143
- display: grid;
144
- grid-template-columns: 1fr 1fr;
145
- gap: 8px;
146
- }
147
-
148
- .action-row .action-btn {
149
- margin-bottom: 0;
150
- padding: 10px 8px;
151
- font-size: 13px;
152
- }
153
-
154
- .action-row .btn-text {
155
- font-size: 12px;
156
- }
157
-
158
- /* Configuration */
159
- .configuration {
160
- padding: 16px;
161
- }
162
-
163
- .config-section h3 {
164
- font-size: 16px;
165
- font-weight: 600;
166
- margin-bottom: 8px;
167
- color: #111827;
168
- }
169
-
170
- .help-text {
171
- font-size: 13px;
172
- color: #6b7280;
173
- margin-bottom: 16px;
174
- }
175
-
176
- .form-group {
177
- margin-bottom: 16px;
178
- }
179
-
180
- .form-group label {
181
- display: block;
182
- font-size: 13px;
183
- font-weight: 500;
184
- margin-bottom: 4px;
185
- color: #374151;
186
- }
187
-
188
- .form-group input,
189
- .form-group select {
190
- width: 100%;
191
- padding: 8px 12px;
192
- border: 1px solid #d1d5db;
193
- border-radius: 6px;
194
- font-size: 14px;
195
- transition: border-color 0.2s ease;
196
- }
197
-
198
- .form-group input:focus,
199
- .form-group select:focus {
200
- outline: none;
201
- border-color: #667eea;
202
- box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
203
- }
204
-
205
- .help-link {
206
- display: inline-block;
207
- font-size: 12px;
208
- color: #667eea;
209
- text-decoration: none;
210
- margin-top: 4px;
211
- }
212
-
213
- .help-link:hover {
214
- text-decoration: underline;
215
- }
216
-
217
- .btn {
218
- padding: 10px 16px;
219
- border: none;
220
- border-radius: 6px;
221
- font-size: 14px;
222
- font-weight: 500;
223
- cursor: pointer;
224
- transition: all 0.2s ease;
225
- }
226
-
227
- .btn.primary {
228
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
229
- color: white;
230
- }
231
-
232
- .btn.primary:hover {
233
- transform: translateY(-1px);
234
- box-shadow: 0 2px 4px rgba(102, 126, 234, 0.3);
235
- }
236
-
237
- .btn.full-width {
238
- width: 100%;
239
- }
240
-
241
- .btn-loading {
242
- margin-right: 8px;
243
- }
244
-
245
- /* Settings */
246
- .settings {
247
- padding: 16px;
248
- border-top: 1px solid #e5e7eb;
249
- }
250
-
251
- .setting-item {
252
- margin-bottom: 16px;
253
- }
254
-
255
- .setting-item label {
256
- display: block;
257
- font-size: 13px;
258
- font-weight: 500;
259
- margin-bottom: 4px;
260
- color: #374151;
261
- }
262
-
263
- .setting-item select {
264
- width: 100%;
265
- padding: 6px 10px;
266
- border: 1px solid #d1d5db;
267
- border-radius: 4px;
268
- font-size: 13px;
269
- }
270
-
271
- /* Checkbox styling */
272
- .checkbox-label {
273
- display: flex !important;
274
- align-items: center;
275
- cursor: pointer;
276
- font-size: 13px !important;
277
- margin-bottom: 0 !important;
278
- }
279
-
280
- .checkbox-label input[type="checkbox"] {
281
- display: none;
282
- }
283
-
284
- .checkmark {
285
- width: 16px;
286
- height: 16px;
287
- border: 2px solid #d1d5db;
288
- border-radius: 3px;
289
- margin-right: 8px;
290
- position: relative;
291
- transition: all 0.2s ease;
292
- }
293
-
294
- .checkbox-label input[type="checkbox"]:checked + .checkmark {
295
- background-color: #667eea;
296
- border-color: #667eea;
297
- }
298
-
299
- .checkbox-label input[type="checkbox"]:checked + .checkmark::after {
300
- content: '✓';
301
- position: absolute;
302
- top: -2px;
303
- left: 2px;
304
- color: white;
305
- font-size: 12px;
306
- font-weight: bold;
307
- }
308
-
309
- /* Status Messages */
310
- .status-message {
311
- position: absolute;
312
- top: 60px;
313
- left: 16px;
314
- right: 16px;
315
- background-color: #f0fdf4;
316
- border: 1px solid #bbf7d0;
317
- border-radius: 6px;
318
- padding: 12px;
319
- z-index: 1000;
320
- animation: slideIn 0.3s ease;
321
- }
322
-
323
- .status-message.error {
324
- background-color: #fef2f2;
325
- border-color: #fecaca;
326
- }
327
-
328
- .status-content {
329
- display: flex;
330
- align-items: center;
331
- gap: 8px;
332
- }
333
-
334
- .status-icon {
335
- font-size: 16px;
336
- }
337
-
338
- .status-text {
339
- flex: 1;
340
- font-size: 13px;
341
- font-weight: 500;
342
- }
343
-
344
- .status-close {
345
- background: none;
346
- border: none;
347
- font-size: 16px;
348
- cursor: pointer;
349
- color: #6b7280;
350
- }
351
-
352
- @keyframes slideIn {
353
- from {
354
- transform: translateY(-10px);
355
- opacity: 0;
356
- }
357
- to {
358
- transform: translateY(0);
359
- opacity: 1;
360
- }
361
- }
362
-
363
- /* Footer */
364
- .footer {
365
- border-top: 1px solid #e5e7eb;
366
- padding: 12px 16px;
367
- background-color: #f9fafb;
368
- }
369
-
370
- .footer-links {
371
- display: flex;
372
- justify-content: space-between;
373
- margin-bottom: 8px;
374
- }
375
-
376
- .footer-link {
377
- background: none;
378
- border: none;
379
- color: #667eea;
380
- font-size: 12px;
381
- cursor: pointer;
382
- text-decoration: none;
383
- }
384
-
385
- .footer-link:hover {
386
- text-decoration: underline;
387
- }
388
-
389
- .usage-info {
390
- text-align: center;
391
- }
392
-
393
- .usage-text {
394
- font-size: 11px;
395
- color: #6b7280;
396
- }
397
-
398
- /* Loading Overlay */
399
- .loading-overlay {
400
- position: absolute;
401
- top: 0;
402
- left: 0;
403
- right: 0;
404
- bottom: 0;
405
- background-color: rgba(255, 255, 255, 0.9);
406
- display: flex;
407
- flex-direction: column;
408
- align-items: center;
409
- justify-content: center;
410
- z-index: 2000;
411
- }
412
-
413
- .loading-spinner {
414
- width: 32px;
415
- height: 32px;
416
- border: 3px solid #e5e7eb;
417
- border-top: 3px solid #667eea;
418
- border-radius: 50%;
419
- animation: spin 1s linear infinite;
420
- margin-bottom: 12px;
421
- }
422
-
423
- .loading-text {
424
- font-size: 14px;
425
- color: #6b7280;
426
- }
427
-
428
- @keyframes spin {
429
- 0% { transform: rotate(0deg); }
430
- 100% { transform: rotate(360deg); }
431
- }
432
-
433
- /* Responsive adjustments */
434
- @media (max-width: 350px) {
435
- body {
436
- width: 300px;
437
- }
438
-
439
- .action-row {
440
- grid-template-columns: 1fr;
441
- }
442
- }
443
-
444
- /* Dark mode support */
445
- @media (prefers-color-scheme: dark) {
446
- body {
447
- background-color: #1f2937;
448
- color: #f3f4f6;
449
- }
450
-
451
- .header {
452
- border-bottom-color: #374151;
453
- }
454
-
455
- .action-btn.secondary {
456
- background-color: #374151;
457
- color: #f3f4f6;
458
- border-color: #4b5563;
459
- }
460
-
461
- .action-btn.secondary:hover {
462
- background-color: #4b5563;
463
- }
464
-
465
- .form-group input,
466
- .form-group select,
467
- .setting-item select {
468
- background-color: #374151;
469
- border-color: #4b5563;
470
- color: #f3f4f6;
471
- }
472
-
473
- .footer {
474
- background-color: #374151;
475
- border-top-color: #4b5563;
476
- }
477
- }
@@ -1,63 +0,0 @@
1
- # Privacy Policy for Airtable Clipper
2
-
3
- **Last updated: August 15, 2025**
4
-
5
- ## Overview
6
-
7
- Airtable Clipper is a Chrome extension that allows users to save web content to their Airtable bases. We are committed to protecting your privacy and being transparent about our data practices.
8
-
9
- ## Information We Collect
10
-
11
- ### Authentication Information
12
- - **Airtable Personal Access Token**: Stored locally in your browser to authenticate with your Airtable account
13
- - **Airtable Base ID**: Stored locally to identify which Airtable base to save content to
14
-
15
- ### Website Content
16
- - **Page Information**: When you save a page, we collect the page title, URL, and any content you choose to save
17
- - **LinkedIn Profile Data**: When saving LinkedIn profiles, we extract publicly available profile information (name, title, company, etc.)
18
-
19
- ## How We Use Your Information
20
-
21
- - **Authentication**: Your Airtable credentials are used solely to save content to your chosen Airtable base
22
- - **Content Saving**: Website content is processed and sent directly to your Airtable base
23
- - **Local Storage**: All authentication data is stored locally in your browser using Chrome's secure storage API
24
-
25
- ## Data Sharing and Third Parties
26
-
27
- - **No Data Sale**: We do not sell, rent, or trade your personal information to third parties
28
- - **Airtable Integration**: Content is sent directly to your Airtable account via their official API
29
- - **No External Servers**: We do not store your data on our servers or send it anywhere except directly to your Airtable account
30
-
31
- ## Data Security
32
-
33
- - **Local Storage**: Authentication credentials are stored securely in your browser using Chrome's encrypted storage
34
- - **HTTPS**: All communications with Airtable use secure HTTPS connections
35
- - **No Logging**: We do not log or track your usage of the extension
36
-
37
- ## Data Retention
38
-
39
- - **Local Storage**: Data is stored locally until you disconnect the extension or uninstall it
40
- - **User Control**: You can disconnect and clear all stored data at any time through the extension's settings
41
-
42
- ## Your Rights
43
-
44
- - **Access**: You control all data stored by the extension
45
- - **Deletion**: You can disconnect the extension to remove all stored authentication data
46
- - **Portability**: All saved content goes directly to your Airtable account, which you control
47
-
48
- ## Changes to This Policy
49
-
50
- We may update this privacy policy occasionally. Changes will be posted on this page with an updated revision date.
51
-
52
- ## Contact Us
53
-
54
- If you have questions about this privacy policy or the extension, please contact us at:
55
- - GitHub: https://github.com/rashidazarang/airtable-clipper/issues
56
-
57
- ## Compliance
58
-
59
- This extension complies with:
60
- - Chrome Web Store Developer Program Policies
61
- - General Data Protection Regulation (GDPR)
62
- - California Consumer Privacy Act (CCPA)
63
- - Airtable's Terms of Service and API Usage Guidelines