@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
package/Dockerfile.node DELETED
@@ -1,20 +0,0 @@
1
- FROM node:18-slim
2
-
3
- WORKDIR /app
4
-
5
- # Copy package files
6
- COPY package*.json ./
7
-
8
- # Install dependencies
9
- RUN npm ci --only=production
10
-
11
- # Copy the main application files
12
- COPY airtable_simple.js ./
13
- COPY .env.example ./
14
-
15
- # Create a non-root user
16
- RUN useradd -m -u 1000 mcpuser && chown -R mcpuser:mcpuser /app
17
- USER mcpuser
18
-
19
- # The server will be started with command line arguments by Smithery
20
- ENTRYPOINT ["node", "airtable_simple.js"]
@@ -1,127 +0,0 @@
1
- # Multi-stage Production Dockerfile for Airtable MCP Server
2
- # Optimized for security, performance, and minimal attack surface
3
- # Trust Score: 100/100 target
4
-
5
- # ============================================================================
6
- # BUILD STAGE - Dependencies and compilation
7
- # ============================================================================
8
- FROM node:18-alpine AS builder
9
-
10
- # Security: Create non-root user early
11
- RUN addgroup -g 1001 -S nodejs && \
12
- adduser -S mcp -u 1001
13
-
14
- # Set working directory
15
- WORKDIR /app
16
-
17
- # Copy package files for dependency installation
18
- COPY package*.json ./
19
- COPY .npmrc* ./
20
-
21
- # Install dependencies with security optimizations
22
- RUN npm ci --only=production --ignore-scripts && \
23
- npm cache clean --force && \
24
- # Remove npm to reduce attack surface
25
- rm -rf /usr/local/lib/node_modules/npm
26
-
27
- # Copy application source
28
- COPY --chown=mcp:nodejs . .
29
-
30
- # Remove development files and sensitive data
31
- RUN rm -rf \
32
- .git \
33
- .github \
34
- tests \
35
- *.test.js \
36
- *.spec.js \
37
- .env.example \
38
- .env.* \
39
- docs \
40
- examples/python* \
41
- *.md \
42
- .eslintrc* \
43
- .prettier* \
44
- jest.config* \
45
- coverage
46
-
47
- # ============================================================================
48
- # RUNTIME STAGE - Minimal production image
49
- # ============================================================================
50
- FROM node:18-alpine AS production
51
-
52
- # Security labels and metadata
53
- LABEL maintainer="Rashid Azarang <rashid@example.com>" \
54
- description="Enhanced Airtable MCP Server v2.1 - Production Ready" \
55
- version="2.1.0" \
56
- security.scan="enabled" \
57
- trust.score="100" \
58
- org.opencontainers.image.title="Airtable MCP Server" \
59
- org.opencontainers.image.description="Production-ready MCP server with OAuth2 and enterprise security" \
60
- org.opencontainers.image.version="2.1.0" \
61
- org.opencontainers.image.vendor="Rashid Azarang" \
62
- org.opencontainers.image.licenses="MIT" \
63
- org.opencontainers.image.source="https://github.com/rashidazarang/airtable-mcp"
64
-
65
- # Install security updates and minimal runtime dependencies
66
- RUN apk update && \
67
- apk upgrade && \
68
- apk add --no-cache \
69
- ca-certificates \
70
- curl \
71
- dumb-init \
72
- tzdata && \
73
- # Clean up
74
- rm -rf /var/cache/apk/* /tmp/*
75
-
76
- # Create non-root user and group
77
- RUN addgroup -g 1001 -S nodejs && \
78
- adduser -S mcp -u 1001 -G nodejs
79
-
80
- # Set working directory
81
- WORKDIR /app
82
-
83
- # Copy built application from builder stage
84
- COPY --from=builder --chown=mcp:nodejs /app/node_modules ./node_modules
85
- COPY --from=builder --chown=mcp:nodejs /app/package*.json ./
86
- COPY --from=builder --chown=mcp:nodejs /app/*.js ./
87
-
88
- # Create necessary directories with proper permissions
89
- RUN mkdir -p /app/logs /app/tmp && \
90
- chown -R mcp:nodejs /app && \
91
- chmod -R 750 /app && \
92
- chmod -R 755 /app/logs /app/tmp
93
-
94
- # Security: Remove shell access and package managers
95
- RUN rm -rf /bin/sh /usr/bin/wget /usr/bin/curl || true
96
-
97
- # Switch to non-root user
98
- USER mcp:nodejs
99
-
100
- # Health check
101
- HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
102
- CMD node -e "require('http').get('http://localhost:8010/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1) })"
103
-
104
- # Environment variables with secure defaults
105
- ENV NODE_ENV=production \
106
- PORT=8010 \
107
- HOST=0.0.0.0 \
108
- LOG_LEVEL=INFO \
109
- LOG_FORMAT=json \
110
- CACHE_TTL=60 \
111
- MAX_REQUESTS_PER_MINUTE=60 \
112
- CONNECTION_TIMEOUT=30000 \
113
- REQUEST_TIMEOUT=10000
114
-
115
- # Expose port
116
- EXPOSE 8010
117
-
118
- # Use dumb-init for proper signal handling
119
- ENTRYPOINT ["/usr/bin/dumb-init", "--"]
120
-
121
- # Start the application
122
- CMD ["node", "airtable_mcp_v2_oauth.js"]
123
-
124
- # Security: Set read-only filesystem (uncomment for maximum security)
125
- # Note: May require volume mounts for logs and tmp directories
126
- # RUN chmod -R a-w /app
127
- # VOLUME ["/app/logs", "/app/tmp"]
@@ -1,371 +0,0 @@
1
- # Airtable MCP Improvement Proposal
2
-
3
- ## Current State Analysis
4
-
5
- ### Existing Tools (v1.2.4)
6
- 1. **list_tables** - Lists all tables in a base
7
- 2. **list_records** - Lists records from a specific table
8
-
9
- ### Missing Core CRUD Operations
10
- The MCP currently only supports READ operations. We need full CRUD capabilities.
11
-
12
- ## Proposed New Features
13
-
14
- ### 🔥 Priority 1: Complete CRUD Operations
15
-
16
- #### 1. **create_record**
17
- Create new records in any table
18
- ```javascript
19
- {
20
- name: "create_record",
21
- params: {
22
- table: "string",
23
- fields: "object"
24
- }
25
- }
26
- ```
27
-
28
- #### 2. **update_record**
29
- Update existing records
30
- ```javascript
31
- {
32
- name: "update_record",
33
- params: {
34
- table: "string",
35
- recordId: "string",
36
- fields: "object"
37
- }
38
- }
39
- ```
40
-
41
- #### 3. **delete_record**
42
- Delete records from tables
43
- ```javascript
44
- {
45
- name: "delete_record",
46
- params: {
47
- table: "string",
48
- recordId: "string"
49
- }
50
- }
51
- ```
52
-
53
- #### 4. **batch_operations**
54
- Perform bulk create/update/delete (up to 10 records)
55
- ```javascript
56
- {
57
- name: "batch_operations",
58
- params: {
59
- table: "string",
60
- operation: "create|update|delete",
61
- records: "array"
62
- }
63
- }
64
- ```
65
-
66
- ### 🚀 Priority 2: Advanced Query & Filter
67
-
68
- #### 5. **search_records**
69
- Search with complex filters and sorting
70
- ```javascript
71
- {
72
- name: "search_records",
73
- params: {
74
- table: "string",
75
- filterByFormula: "string", // Airtable formula syntax
76
- sort: [{field: "string", direction: "asc|desc"}],
77
- maxRecords: "number",
78
- fields: ["string"] // Specific fields to return
79
- }
80
- }
81
- ```
82
-
83
- #### 6. **get_record_by_id**
84
- Get a single record by its ID
85
- ```javascript
86
- {
87
- name: "get_record_by_id",
88
- params: {
89
- table: "string",
90
- recordId: "string"
91
- }
92
- }
93
- ```
94
-
95
- ### 📊 Priority 3: Schema Management
96
-
97
- #### 7. **get_table_schema**
98
- Get detailed field information for a table
99
- ```javascript
100
- {
101
- name: "get_table_schema",
102
- params: {
103
- table: "string"
104
- }
105
- }
106
- ```
107
-
108
- #### 8. **create_table**
109
- Create a new table in the base
110
- ```javascript
111
- {
112
- name: "create_table",
113
- params: {
114
- name: "string",
115
- fields: [{name: "string", type: "string", options: "object"}]
116
- }
117
- }
118
- ```
119
-
120
- #### 9. **create_field**
121
- Add a new field to an existing table
122
- ```javascript
123
- {
124
- name: "create_field",
125
- params: {
126
- table: "string",
127
- field: {name: "string", type: "string", options: "object"}
128
- }
129
- }
130
- ```
131
-
132
- ### 🔄 Priority 4: Data Management
133
-
134
- #### 10. **export_table**
135
- Export entire table as JSON/CSV
136
- ```javascript
137
- {
138
- name: "export_table",
139
- params: {
140
- table: "string",
141
- format: "json|csv"
142
- }
143
- }
144
- ```
145
-
146
- #### 11. **import_data**
147
- Import data from JSON/CSV
148
- ```javascript
149
- {
150
- name: "import_data",
151
- params: {
152
- table: "string",
153
- data: "string|array",
154
- format: "json|csv",
155
- updateExisting: "boolean"
156
- }
157
- }
158
- ```
159
-
160
- #### 12. **duplicate_table**
161
- Clone a table with or without data
162
- ```javascript
163
- {
164
- name: "duplicate_table",
165
- params: {
166
- sourceTable: "string",
167
- newName: "string",
168
- includeData: "boolean"
169
- }
170
- }
171
- ```
172
-
173
- ### 🔗 Priority 5: Relationships & Links
174
-
175
- #### 13. **link_records**
176
- Create links between records in linked fields
177
- ```javascript
178
- {
179
- name: "link_records",
180
- params: {
181
- sourceTable: "string",
182
- sourceRecordId: "string",
183
- linkField: "string",
184
- targetRecordIds: ["string"]
185
- }
186
- }
187
- ```
188
-
189
- #### 14. **get_linked_records**
190
- Fetch all records linked from a specific record
191
- ```javascript
192
- {
193
- name: "get_linked_records",
194
- params: {
195
- table: "string",
196
- recordId: "string",
197
- linkField: "string"
198
- }
199
- }
200
- ```
201
-
202
- ### 📈 Priority 6: Analytics & Aggregation
203
-
204
- #### 15. **aggregate_data**
205
- Perform aggregations on table data
206
- ```javascript
207
- {
208
- name: "aggregate_data",
209
- params: {
210
- table: "string",
211
- aggregations: [{
212
- field: "string",
213
- function: "sum|avg|count|min|max"
214
- }],
215
- groupBy: ["string"]
216
- }
217
- }
218
- ```
219
-
220
- #### 16. **get_table_stats**
221
- Get statistics about a table
222
- ```javascript
223
- {
224
- name: "get_table_stats",
225
- params: {
226
- table: "string"
227
- }
228
- // Returns: record count, field types, storage size, etc.
229
- }
230
- ```
231
-
232
- ### 🔍 Priority 7: Views Management
233
-
234
- #### 17. **list_views**
235
- List all views in a table
236
- ```javascript
237
- {
238
- name: "list_views",
239
- params: {
240
- table: "string"
241
- }
242
- }
243
- ```
244
-
245
- #### 18. **get_view_records**
246
- Get records from a specific view
247
- ```javascript
248
- {
249
- name: "get_view_records",
250
- params: {
251
- table: "string",
252
- view: "string"
253
- }
254
- }
255
- ```
256
-
257
- ### 🎨 Priority 8: Attachments & Media
258
-
259
- #### 19. **upload_attachment**
260
- Upload files to attachment fields
261
- ```javascript
262
- {
263
- name: "upload_attachment",
264
- params: {
265
- table: "string",
266
- recordId: "string",
267
- field: "string",
268
- fileUrl: "string|base64"
269
- }
270
- }
271
- ```
272
-
273
- #### 20. **get_attachments**
274
- Download attachments from records
275
- ```javascript
276
- {
277
- name: "get_attachments",
278
- params: {
279
- table: "string",
280
- recordId: "string",
281
- field: "string"
282
- }
283
- }
284
- ```
285
-
286
- ## Implementation Roadmap
287
-
288
- ### Phase 1 (Version 1.3.0) - Essential CRUD
289
- - ✅ create_record
290
- - ✅ update_record
291
- - ✅ delete_record
292
- - ✅ get_record_by_id
293
- - ✅ search_records
294
-
295
- ### Phase 2 (Version 1.4.0) - Batch & Schema
296
- - batch_operations
297
- - get_table_schema
298
- - export_table
299
- - import_data
300
-
301
- ### Phase 3 (Version 1.5.0) - Advanced Features
302
- - create_table
303
- - create_field
304
- - link_records
305
- - get_linked_records
306
-
307
- ### Phase 4 (Version 2.0.0) - Enterprise Features
308
- - aggregate_data
309
- - Views management
310
- - Attachments handling
311
- - Webhooks support
312
-
313
- ## Technical Considerations
314
-
315
- ### Rate Limiting
316
- - Implement request queuing to respect 5 req/sec limit
317
- - Add retry logic with exponential backoff
318
- - Cache frequently accessed data
319
-
320
- ### Error Handling
321
- - Detailed error messages for debugging
322
- - Graceful fallbacks for missing permissions
323
- - Validation of input parameters
324
-
325
- ### Performance
326
- - Implement pagination for large datasets
327
- - Add optional field filtering to reduce payload
328
- - Support streaming for large exports
329
-
330
- ### Security
331
- - Validate all input to prevent injection
332
- - Support field-level permissions
333
- - Add optional audit logging
334
-
335
- ## Usage Examples
336
-
337
- ### Creating a Record
338
- ```
339
- "Create a new task in the Tasks table with title 'Review proposal' and status 'In Progress'"
340
- ```
341
-
342
- ### Complex Search
343
- ```
344
- "Find all high-priority tasks assigned to John that are due this week"
345
- ```
346
-
347
- ### Bulk Operations
348
- ```
349
- "Mark all tasks with status 'Done' as archived"
350
- ```
351
-
352
- ### Data Export
353
- ```
354
- "Export the entire Customers table as a CSV file"
355
- ```
356
-
357
- ## Benefits
358
-
359
- 1. **Complete Functionality**: Full CRUD operations matching Airtable's capabilities
360
- 2. **Natural Language**: All operations accessible through conversational AI
361
- 3. **Productivity**: Batch operations and data import/export save time
362
- 4. **Flexibility**: Support for complex queries and relationships
363
- 5. **Enterprise Ready**: Schema management and analytics features
364
-
365
- ## Next Steps
366
-
367
- 1. Prioritize features based on user needs
368
- 2. Implement Phase 1 features (essential CRUD)
369
- 3. Add comprehensive testing for each new tool
370
- 4. Update documentation with examples
371
- 5. Gather user feedback for Phase 2 planning
package/INSTALLATION.md DELETED
@@ -1,183 +0,0 @@
1
- # Installation
2
-
3
- Airtable MCP embeds Airtable database connectivity directly into your AI-powered code editor
4
-
5
- ## Getting Started
6
-
7
- Built by Rashid Azarang,
8
-
9
- Airtable MCP gives AI code editors and agents the ability to access and manipulate your Airtable databases for powerful data management capabilities - all in a secure manner with your own API tokens.
10
-
11
- With this MCP server tool, you can enable AI code editors and agents to have access to:
12
-
13
- * List and access all your Airtable bases
14
- * Browse tables, fields, and record data
15
- * Create, read, update, and delete records
16
- * Export and manipulate schemas
17
- * Perform complex queries against your data
18
- * Create data migration mappings
19
- * Analyze and transform your Airtable data
20
-
21
- That way, you can simply tell Cursor or any AI code editor with MCP integrations:
22
-
23
- "Show me all the tables in my Airtable base"
24
-
25
- "Find all records from the Customers table where the status is Active and the last purchase was after January 1st"
26
-
27
- "Create a new record in the Products table with these fields..."
28
-
29
- "Export the schema of my current Airtable base"
30
-
31
- "Help me create a mapping between these two tables for data migration"
32
-
33
- ---
34
-
35
- ## Requirements
36
-
37
- * Node.js 14+ installed on your machine
38
- * Python 3.10+ installed on your machine (automatically detected)
39
- * Airtable Personal Access Token (API Key)
40
- * MCP Client Application (Cursor, Claude Desktop, Cline, Zed, etc.)
41
-
42
- **Note**: Model Context Protocol (MCP) is specific to Anthropic models. When using an editor like Cursor, make sure to enable composer agent with Claude 3.5 Sonnet selected as the model.
43
-
44
- ---
45
-
46
- ## Installation
47
-
48
- ### 1. Install via Smithery (Easiest)
49
-
50
- The easiest way to install Airtable MCP is through Smithery:
51
-
52
- 1. Visit [Smithery](https://smithery.ai)
53
- 2. Search for "@rashidazarang/airtable-mcp"
54
- 3. Click "Install" and follow the prompts to configure with your Airtable token and base ID
55
-
56
- ### 2. Install via NPX (Alternative)
57
-
58
- Another simple way to install and use Airtable MCP is via NPX:
59
-
60
- ```bash
61
- # Install globally
62
- npm install -g airtable-mcp
63
-
64
- # Or use directly with npx (no installation needed)
65
- npx airtable-mcp --token YOUR_AIRTABLE_TOKEN --base YOUR_BASE_ID
66
- ```
67
-
68
- ### 3. Get Your Airtable API Token
69
-
70
- 1. Log in to your Airtable account
71
- 2. Go to your [Account Settings](https://airtable.com/account)
72
- 3. Navigate to the "API" section
73
- 4. Create a Personal Access Token with appropriate permissions
74
- 5. Copy your token to use in the configuration
75
-
76
- ### 4. Configure Your MCP Client
77
-
78
- #### For Cursor:
79
-
80
- 1. Go to Cursor Settings
81
- 2. Navigate to Features, scroll down to MCP Servers and click "Add new MCP server"
82
- 3. Give it a unique name (airtable-tools), set type to "command" and set the command to:
83
-
84
- **For macOS/Linux/Windows:**
85
- ```bash
86
- npx airtable-mcp --token YOUR_AIRTABLE_TOKEN --base YOUR_BASE_ID
87
- ```
88
-
89
- Replace `YOUR_AIRTABLE_TOKEN` with your Airtable Personal Access Token and `YOUR_BASE_ID` with your default Airtable base ID (optional).
90
-
91
- #### For Advanced Users via ~/.cursor/mcp.json:
92
-
93
- Edit your `~/.cursor/mcp.json` file to include:
94
-
95
- ```json
96
- {
97
- "mcpServers": {
98
- "airtable-tools": {
99
- "command": "npx",
100
- "args": [
101
- "airtable-mcp",
102
- "--token", "YOUR_AIRTABLE_TOKEN",
103
- "--base", "YOUR_BASE_ID"
104
- ]
105
- }
106
- }
107
- }
108
- ```
109
-
110
- ### 5. Verify Connection
111
-
112
- 1. Restart your MCP client (Cursor, etc.)
113
- 2. Create a new query using the Composer Agent with Claude 3.5 Sonnet model
114
- 3. Ask something like "List my Airtable bases" or "Show me the tables in my current base"
115
- 4. You should see a response with your Airtable data
116
-
117
- ### 6. For Production Use (Optional)
118
-
119
- For continuous availability, you can set up Airtable MCP using PM2:
120
-
121
- ```bash
122
- # Install PM2 if you don't have it
123
- npm install -g pm2
124
-
125
- # Create a PM2 config file
126
- echo 'module.exports = {
127
- apps: [
128
- {
129
- name: "airtable-mcp",
130
- script: "npx",
131
- args: [
132
- "airtable-mcp",
133
- "--token", "YOUR_AIRTABLE_TOKEN",
134
- "--base", "YOUR_BASE_ID"
135
- ],
136
- env: {
137
- PATH: process.env.PATH,
138
- },
139
- },
140
- ],
141
- };' > ecosystem.config.js
142
-
143
- # Start the process
144
- pm2 start ecosystem.config.js
145
-
146
- # Set it to start on boot
147
- pm2 startup
148
- pm2 save
149
- ```
150
-
151
- ---
152
-
153
- ## Troubleshooting
154
-
155
- Here are some common issues and their solutions:
156
-
157
- ### Error: Unable to connect to Airtable API
158
-
159
- - Double-check your Airtable API token is correct and has sufficient permissions
160
- - Verify your internet connection
161
- - Check if Airtable API is experiencing downtime
162
-
163
- ### Issue: MCP server not connecting
164
-
165
- - Make sure Node.js 14+ and Python 3.10+ are installed and in your PATH
166
- - Try specifying a specific version: `npx airtable-mcp@latest`
167
- - Check the Cursor logs for any connection errors
168
-
169
- ### Error: Base not found
170
-
171
- - Verify your base ID is correct
172
- - Make sure your API token has access to the specified base
173
- - Try listing all bases first to confirm access
174
-
175
- ### Issue: Permission denied errors
176
-
177
- - Make sure your token has the necessary permissions for the operations you're trying to perform
178
- - Check if you're attempting operations on tables/bases that your token doesn't have access to
179
-
180
- ### For more help
181
-
182
- - Open an issue on the [GitHub repository](https://github.com/rashidazarang/airtable-mcp/issues)
183
- - Check the Airtable API documentation for any API-specific errors