@rashidazarang/airtable-mcp 2.2.1 → 2.2.2
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.
- package/README.md +25 -5
- package/airtable_simple_production.js +41 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,13 +3,21 @@
|
|
|
3
3
|
[](https://archestra.ai/mcp-catalog/rashidazarang__airtable-mcp)
|
|
4
4
|
[](https://smithery.ai/server/@rashidazarang/airtable-mcp)
|
|
5
5
|

|
|
6
|
-
[](https://github.com/rashidazarang/airtable-mcp)
|
|
7
|
+
[](https://github.com/rashidazarang/airtable-mcp)
|
|
8
|
+
[](https://modelcontextprotocol.io/)
|
|
7
9
|
|
|
8
|
-
A Model Context Protocol
|
|
10
|
+
🏆 **Complete MCP 2024-11-05 Implementation** - A production-ready Model Context Protocol server that enables AI assistants like Claude to interact with your Airtable bases through a secure, feature-complete interface.
|
|
9
11
|
|
|
10
|
-
##
|
|
12
|
+
## 🚀 Latest: Enhanced v2.2.1
|
|
11
13
|
|
|
12
|
-
**
|
|
14
|
+
**Complete MCP Protocol Support** with enterprise security:
|
|
15
|
+
- ✅ **Prompts** - 4 AI-powered templates for data analysis
|
|
16
|
+
- ✅ **Sampling** - LLM integration for intelligent operations
|
|
17
|
+
- ✅ **Roots** - Filesystem boundary management
|
|
18
|
+
- ✅ **Logging** - Dynamic structured logging
|
|
19
|
+
- ✅ **OAuth2** - PKCE authentication flow
|
|
20
|
+
- ✅ **Security** - XSS protection, input validation, CSP headers
|
|
13
21
|
|
|
14
22
|
## ✨ Features
|
|
15
23
|
|
|
@@ -26,6 +34,8 @@ A Model Context Protocol (MCP) server that enables AI assistants like Claude to
|
|
|
26
34
|
- 📎 **Attachment Management** - Upload files via URLs to attachment fields
|
|
27
35
|
- ⚡ **Batch Operations** - Create, update, delete up to 10 records at once
|
|
28
36
|
- 👥 **Collaboration Tools** - Manage base collaborators and shared views
|
|
37
|
+
- 🤖 **AI Integration** - Prompts and sampling for intelligent data operations
|
|
38
|
+
- 🔐 **Enterprise Security** - OAuth2, rate limiting, comprehensive validation
|
|
29
39
|
|
|
30
40
|
## 📋 Prerequisites
|
|
31
41
|
|
|
@@ -238,6 +248,14 @@ Once configured, you can interact with your Airtable data naturally:
|
|
|
238
248
|
| `list_collaborators` | View base collaborators and their permission levels |
|
|
239
249
|
| `list_shares` | List shared views and their public configurations |
|
|
240
250
|
|
|
251
|
+
### 🤖 AI Integration (4 prompts) - **New in v2.2.0**
|
|
252
|
+
| Prompt | Description |
|
|
253
|
+
|--------|-------------|
|
|
254
|
+
| `analyze_data` | AI-powered data analysis with trends and insights |
|
|
255
|
+
| `create_report` | Generate comprehensive reports with AI assistance |
|
|
256
|
+
| `data_insights` | Discover hidden correlations and patterns |
|
|
257
|
+
| `optimize_workflow` | Get AI recommendations for workflow improvements |
|
|
258
|
+
|
|
241
259
|
## 🔧 Advanced Configuration
|
|
242
260
|
|
|
243
261
|
### Using with Smithery Cloud
|
|
@@ -346,6 +364,8 @@ lsof -ti:8010 | xargs kill -9
|
|
|
346
364
|
|
|
347
365
|
## 📦 Version History
|
|
348
366
|
|
|
367
|
+
- **v2.2.1** (2025-08-16) - 🔒 **Security release**: Fixed XSS and format string vulnerabilities
|
|
368
|
+
- **v2.2.0** (2025-08-16) - 🏆 **Major release**: Complete MCP 2024-11-05 protocol implementation
|
|
349
369
|
- **v1.6.0** (2025-08-15) - 🎆 **Major release**: Added batch operations & attachment management (33 total tools)
|
|
350
370
|
- **v1.5.0** (2025-08-15) - Added comprehensive schema management (23 total tools)
|
|
351
371
|
- **v1.4.0** (2025-08-14) - Added webhook support and enhanced CRUD operations (12 tools)
|
|
@@ -374,4 +394,4 @@ MIT License - see [LICENSE](./LICENSE) file for details
|
|
|
374
394
|
|
|
375
395
|
---
|
|
376
396
|
|
|
377
|
-
**Version**:
|
|
397
|
+
**Version**: 2.2.1 | **Status**: ✅ Production Ready | **MCP Protocol**: 2024-11-05 Complete | **Last Updated**: August 16, 2025
|
|
@@ -379,7 +379,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
379
379
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
380
380
|
res.end(JSON.stringify({
|
|
381
381
|
status: 'healthy',
|
|
382
|
-
version: '2.2.
|
|
382
|
+
version: '2.2.2',
|
|
383
383
|
timestamp: new Date().toISOString(),
|
|
384
384
|
uptime: process.uptime()
|
|
385
385
|
}));
|
|
@@ -422,9 +422,11 @@ const server = http.createServer(async (req, res) => {
|
|
|
422
422
|
|
|
423
423
|
res.writeHead(200, {
|
|
424
424
|
'Content-Type': 'text/html',
|
|
425
|
-
'Content-Security-Policy': "default-src '
|
|
425
|
+
'Content-Security-Policy': "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; connect-src 'none'; object-src 'none'; base-uri 'none'; form-action 'none';",
|
|
426
426
|
'X-Content-Type-Options': 'nosniff',
|
|
427
|
-
'X-Frame-Options': 'DENY'
|
|
427
|
+
'X-Frame-Options': 'DENY',
|
|
428
|
+
'X-XSS-Protection': '1; mode=block',
|
|
429
|
+
'Referrer-Policy': 'no-referrer'
|
|
428
430
|
});
|
|
429
431
|
|
|
430
432
|
res.end(`<!DOCTYPE html>
|
|
@@ -447,19 +449,42 @@ const server = http.createServer(async (req, res) => {
|
|
|
447
449
|
</button>
|
|
448
450
|
</div>
|
|
449
451
|
<script>
|
|
450
|
-
|
|
451
|
-
|
|
452
|
+
// Use validated and sanitized values to prevent XSS
|
|
453
|
+
(function() {
|
|
454
|
+
const baseUrl = ${JSON.stringify(redirectUri.slice(0, 2000))};
|
|
452
455
|
const code = ${JSON.stringify(authCode)};
|
|
453
|
-
const state = ${JSON.stringify(state || '')};
|
|
454
|
-
|
|
455
|
-
window.
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
456
|
+
const state = ${JSON.stringify((state || '').slice(0, 200))};
|
|
457
|
+
|
|
458
|
+
window.authorize = function() {
|
|
459
|
+
try {
|
|
460
|
+
// Additional validation in JavaScript
|
|
461
|
+
const url = new URL(baseUrl);
|
|
462
|
+
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
463
|
+
throw new Error('Invalid protocol');
|
|
464
|
+
}
|
|
465
|
+
const finalUrl = baseUrl + '?code=' + encodeURIComponent(code) + '&state=' + encodeURIComponent(state);
|
|
466
|
+
window.location.href = finalUrl;
|
|
467
|
+
} catch (e) {
|
|
468
|
+
console.error('Authorization failed:', e);
|
|
469
|
+
alert('Invalid redirect URL');
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
window.deny = function() {
|
|
474
|
+
try {
|
|
475
|
+
// Additional validation in JavaScript
|
|
476
|
+
const url = new URL(baseUrl);
|
|
477
|
+
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
478
|
+
throw new Error('Invalid protocol');
|
|
479
|
+
}
|
|
480
|
+
const finalUrl = baseUrl + '?error=access_denied&state=' + encodeURIComponent(state);
|
|
481
|
+
window.location.href = finalUrl;
|
|
482
|
+
} catch (e) {
|
|
483
|
+
console.error('Denial failed:', e);
|
|
484
|
+
alert('Invalid redirect URL');
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
})();
|
|
463
488
|
</script>
|
|
464
489
|
</body>
|
|
465
490
|
</html>`);
|
|
@@ -588,7 +613,7 @@ const server = http.createServer(async (req, res) => {
|
|
|
588
613
|
},
|
|
589
614
|
serverInfo: {
|
|
590
615
|
name: 'Airtable MCP Server Enhanced',
|
|
591
|
-
version: '2.2.
|
|
616
|
+
version: '2.2.2',
|
|
592
617
|
description: 'Complete MCP 2024-11-05 server with Prompts, Sampling, Roots, Logging, and OAuth2'
|
|
593
618
|
}
|
|
594
619
|
}
|
package/package.json
CHANGED