@rashidazarang/airtable-mcp 2.1.0 → 2.2.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 (155) hide show
  1. package/README.md +1 -1
  2. package/airtable_simple_production.js +387 -5
  3. package/examples/claude_simple_config.json +0 -9
  4. package/package.json +10 -1
  5. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -173
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  7. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  8. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -209
  9. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  10. package/.github/ISSUE_TEMPLATE/security-report.yml +0 -216
  11. package/.github/pull_request_template.md +0 -245
  12. package/.github/workflows/ci-cd.yml +0 -408
  13. package/.github/workflows/security-audit.yml +0 -316
  14. package/API_DOCUMENTATION.md +0 -897
  15. package/CAPABILITY_REPORT.md +0 -118
  16. package/CLAUDE_INTEGRATION.md +0 -96
  17. package/CODE_OF_CONDUCT.md +0 -181
  18. package/CONTRIBUTING.md +0 -81
  19. package/DEVELOPMENT.md +0 -190
  20. package/Dockerfile +0 -39
  21. package/Dockerfile.node +0 -20
  22. package/Dockerfile.production +0 -127
  23. package/IMPROVEMENT_PROPOSAL.md +0 -371
  24. package/INSTALLATION.md +0 -183
  25. package/ISSUE_RESPONSES.md +0 -171
  26. package/MCP_REVIEW_SUMMARY.md +0 -142
  27. package/QUICK_START.md +0 -60
  28. package/RELEASE_NOTES_v1.2.0.md +0 -50
  29. package/RELEASE_NOTES_v1.2.1.md +0 -40
  30. package/RELEASE_NOTES_v1.2.2.md +0 -48
  31. package/RELEASE_NOTES_v1.2.3.md +0 -105
  32. package/RELEASE_NOTES_v1.2.4.md +0 -60
  33. package/RELEASE_NOTES_v1.4.0.md +0 -104
  34. package/RELEASE_NOTES_v1.5.0.md +0 -185
  35. package/RELEASE_NOTES_v1.6.0.md +0 -248
  36. package/SECURITY_NOTICE.md +0 -40
  37. package/airtable-clipper/CHANGELOG.md +0 -198
  38. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +0 -343
  39. package/airtable-clipper/LAUNCH_STRATEGY.md +0 -495
  40. package/airtable-clipper/LICENSE +0 -21
  41. package/airtable-clipper/OAUTH_SETUP.md +0 -51
  42. package/airtable-clipper/PRIVACY_POLICY.md +0 -187
  43. package/airtable-clipper/README.md +0 -575
  44. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +0 -273
  45. package/airtable-clipper/build.sh +0 -85
  46. package/airtable-clipper/docs/QUICK_START.md +0 -99
  47. package/airtable-clipper/docs/SETUP.md +0 -291
  48. package/airtable-clipper/extension/background.js +0 -337
  49. package/airtable-clipper/extension/base-setup.html +0 -324
  50. package/airtable-clipper/extension/base-setup.js +0 -471
  51. package/airtable-clipper/extension/content.js +0 -771
  52. package/airtable-clipper/extension/icons/README.md +0 -69
  53. package/airtable-clipper/extension/icons/icon-16.png +0 -3
  54. package/airtable-clipper/extension/manifest.json +0 -73
  55. package/airtable-clipper/extension/popup.html +0 -144
  56. package/airtable-clipper/extension/popup.js +0 -475
  57. package/airtable-clipper/extension/styles/content.css +0 -229
  58. package/airtable-clipper/extension/styles/popup.css +0 -477
  59. package/airtable-clipper/privacy-policy.md +0 -63
  60. package/airtable-clipper/releases/v1.0.0/background.js +0 -337
  61. package/airtable-clipper/releases/v1.0.0/base-setup.html +0 -324
  62. package/airtable-clipper/releases/v1.0.0/base-setup.js +0 -471
  63. package/airtable-clipper/releases/v1.0.0/content.js +0 -771
  64. package/airtable-clipper/releases/v1.0.0/icons/README.md +0 -69
  65. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +0 -2
  66. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +0 -3
  67. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +0 -2
  68. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +0 -2
  69. package/airtable-clipper/releases/v1.0.0/manifest.json +0 -73
  70. package/airtable-clipper/releases/v1.0.0/popup.html +0 -144
  71. package/airtable-clipper/releases/v1.0.0/popup.js +0 -475
  72. package/airtable-clipper/releases/v1.0.0/sidepanel.html +0 -25
  73. package/airtable-clipper/releases/v1.0.0/styles/content.css +0 -229
  74. package/airtable-clipper/releases/v1.0.0/styles/popup.css +0 -477
  75. package/airtable-clipper/releases/v1.0.1/background.js +0 -337
  76. package/airtable-clipper/releases/v1.0.1/base-setup.html +0 -324
  77. package/airtable-clipper/releases/v1.0.1/base-setup.js +0 -471
  78. package/airtable-clipper/releases/v1.0.1/content.js +0 -771
  79. package/airtable-clipper/releases/v1.0.1/icons/README.md +0 -69
  80. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +0 -2
  81. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +0 -3
  82. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +0 -2
  83. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +0 -2
  84. package/airtable-clipper/releases/v1.0.1/manifest.json +0 -70
  85. package/airtable-clipper/releases/v1.0.1/popup.html +0 -157
  86. package/airtable-clipper/releases/v1.0.1/popup.js +0 -562
  87. package/airtable-clipper/releases/v1.0.1/sidepanel.html +0 -25
  88. package/airtable-clipper/releases/v1.0.1/styles/content.css +0 -229
  89. package/airtable-clipper/releases/v1.0.1/styles/popup.css +0 -647
  90. package/airtable-clipper/releases/v1.0.2/background.js +0 -337
  91. package/airtable-clipper/releases/v1.0.2/base-setup.html +0 -324
  92. package/airtable-clipper/releases/v1.0.2/base-setup.js +0 -471
  93. package/airtable-clipper/releases/v1.0.2/content.js +0 -771
  94. package/airtable-clipper/releases/v1.0.2/icons/README.md +0 -69
  95. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +0 -2
  96. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +0 -3
  97. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +0 -2
  98. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +0 -2
  99. package/airtable-clipper/releases/v1.0.2/manifest.json +0 -62
  100. package/airtable-clipper/releases/v1.0.2/popup.html +0 -157
  101. package/airtable-clipper/releases/v1.0.2/popup.js +0 -567
  102. package/airtable-clipper/releases/v1.0.2/sidepanel.html +0 -25
  103. package/airtable-clipper/releases/v1.0.2/styles/content.css +0 -229
  104. package/airtable-clipper/releases/v1.0.2/styles/popup.css +0 -647
  105. package/airtable-clipper/terms-of-service.md +0 -124
  106. package/airtable-clipper/test-credentials.md +0 -61
  107. package/airtable-clipper/test-extension/background.js +0 -337
  108. package/airtable-clipper/test-extension/base-setup.html +0 -324
  109. package/airtable-clipper/test-extension/base-setup.js +0 -471
  110. package/airtable-clipper/test-extension/content.js +0 -873
  111. package/airtable-clipper/test-extension/icons/README.md +0 -69
  112. package/airtable-clipper/test-extension/icons/icon-128.png +0 -2
  113. package/airtable-clipper/test-extension/icons/icon-16.png +0 -3
  114. package/airtable-clipper/test-extension/icons/icon-32.png +0 -2
  115. package/airtable-clipper/test-extension/icons/icon-48.png +0 -2
  116. package/airtable-clipper/test-extension/manifest.json +0 -72
  117. package/airtable-clipper/test-extension/popup.html +0 -274
  118. package/airtable-clipper/test-extension/popup.js +0 -729
  119. package/airtable-clipper/test-extension/sidepanel.html +0 -25
  120. package/airtable-clipper/test-extension/styles/content.css +0 -229
  121. package/airtable-clipper/test-extension/styles/popup.css +0 -794
  122. package/airtable_mcp/__init__.py +0 -5
  123. package/airtable_mcp/src/server.py +0 -329
  124. package/airtable_mcp_v2.js +0 -1505
  125. package/airtable_mcp_v2_oauth.js +0 -1048
  126. package/airtable_mcp_v3_advanced.js +0 -1161
  127. package/cleanup.sh +0 -71
  128. package/docker-compose.production.yml +0 -366
  129. package/helm/airtable-mcp/Chart.yaml +0 -122
  130. package/helm/airtable-mcp/values.yaml +0 -538
  131. package/index.js +0 -179
  132. package/inspector.py +0 -148
  133. package/inspector_server.py +0 -337
  134. package/k8s/deployment.yaml +0 -402
  135. package/k8s/namespace.yaml +0 -108
  136. package/k8s/service.yaml +0 -194
  137. package/monitoring/alerts.yml +0 -289
  138. package/monitoring/prometheus.yml +0 -224
  139. package/publish-steps.txt +0 -27
  140. package/quick_test.sh +0 -30
  141. package/requirements.txt +0 -10
  142. package/setup.py +0 -29
  143. package/simple_airtable_server.py +0 -151
  144. package/smithery.yaml +0 -45
  145. package/test_all_features.sh +0 -146
  146. package/test_all_operations.sh +0 -120
  147. package/test_client.py +0 -70
  148. package/test_enhanced_features.js +0 -389
  149. package/test_mcp_comprehensive.js +0 -163
  150. package/test_mock_server.js +0 -180
  151. package/test_v1.4.0_final.sh +0 -131
  152. package/test_v1.5.0_comprehensive.sh +0 -96
  153. package/test_v1.5.0_final.sh +0 -224
  154. package/test_v1.6.0_comprehensive.sh +0 -187
  155. 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