@rashidazarang/airtable-mcp 1.6.0 → 2.1.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.
- package/.github/ISSUE_TEMPLATE/bug-report.yml +173 -0
- package/.github/ISSUE_TEMPLATE/feature-request.yml +209 -0
- package/.github/ISSUE_TEMPLATE/security-report.yml +216 -0
- package/.github/pull_request_template.md +245 -0
- package/.github/workflows/ci-cd.yml +408 -0
- package/.github/workflows/security-audit.yml +316 -0
- package/API_DOCUMENTATION.md +897 -0
- package/CODE_OF_CONDUCT.md +181 -0
- package/Dockerfile.production +127 -0
- package/README.md +1 -0
- package/airtable-clipper/CHANGELOG.md +198 -0
- package/airtable-clipper/CHROME_STORE_SUBMISSION.md +343 -0
- package/airtable-clipper/LAUNCH_STRATEGY.md +495 -0
- package/airtable-clipper/LICENSE +21 -0
- package/airtable-clipper/OAUTH_SETUP.md +51 -0
- package/airtable-clipper/PRIVACY_POLICY.md +187 -0
- package/airtable-clipper/README.md +575 -0
- package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +273 -0
- package/airtable-clipper/build.sh +85 -0
- package/airtable-clipper/docs/QUICK_START.md +99 -0
- package/airtable-clipper/docs/SETUP.md +291 -0
- package/airtable-clipper/extension/background.js +337 -0
- package/airtable-clipper/extension/base-setup.html +324 -0
- package/airtable-clipper/extension/base-setup.js +471 -0
- package/airtable-clipper/extension/content.js +771 -0
- package/airtable-clipper/extension/icons/README.md +69 -0
- package/airtable-clipper/extension/icons/icon-16.png +3 -0
- package/airtable-clipper/extension/manifest.json +73 -0
- package/airtable-clipper/extension/popup.html +144 -0
- package/airtable-clipper/extension/popup.js +475 -0
- package/airtable-clipper/extension/styles/content.css +229 -0
- package/airtable-clipper/extension/styles/popup.css +477 -0
- package/airtable-clipper/privacy-policy.md +63 -0
- package/airtable-clipper/releases/v1.0.0/background.js +337 -0
- package/airtable-clipper/releases/v1.0.0/base-setup.html +324 -0
- package/airtable-clipper/releases/v1.0.0/base-setup.js +471 -0
- package/airtable-clipper/releases/v1.0.0/content.js +771 -0
- package/airtable-clipper/releases/v1.0.0/icons/README.md +69 -0
- package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +2 -0
- package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +3 -0
- package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +2 -0
- package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +2 -0
- package/airtable-clipper/releases/v1.0.0/manifest.json +73 -0
- package/airtable-clipper/releases/v1.0.0/popup.html +144 -0
- package/airtable-clipper/releases/v1.0.0/popup.js +475 -0
- package/airtable-clipper/releases/v1.0.0/sidepanel.html +25 -0
- package/airtable-clipper/releases/v1.0.0/styles/content.css +229 -0
- package/airtable-clipper/releases/v1.0.0/styles/popup.css +477 -0
- package/airtable-clipper/releases/v1.0.1/background.js +337 -0
- package/airtable-clipper/releases/v1.0.1/base-setup.html +324 -0
- package/airtable-clipper/releases/v1.0.1/base-setup.js +471 -0
- package/airtable-clipper/releases/v1.0.1/content.js +771 -0
- package/airtable-clipper/releases/v1.0.1/icons/README.md +69 -0
- package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +2 -0
- package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +3 -0
- package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +2 -0
- package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +2 -0
- package/airtable-clipper/releases/v1.0.1/manifest.json +70 -0
- package/airtable-clipper/releases/v1.0.1/popup.html +157 -0
- package/airtable-clipper/releases/v1.0.1/popup.js +562 -0
- package/airtable-clipper/releases/v1.0.1/sidepanel.html +25 -0
- package/airtable-clipper/releases/v1.0.1/styles/content.css +229 -0
- package/airtable-clipper/releases/v1.0.1/styles/popup.css +647 -0
- package/airtable-clipper/releases/v1.0.2/background.js +337 -0
- package/airtable-clipper/releases/v1.0.2/base-setup.html +324 -0
- package/airtable-clipper/releases/v1.0.2/base-setup.js +471 -0
- package/airtable-clipper/releases/v1.0.2/content.js +771 -0
- package/airtable-clipper/releases/v1.0.2/icons/README.md +69 -0
- package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +2 -0
- package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +3 -0
- package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +2 -0
- package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +2 -0
- package/airtable-clipper/releases/v1.0.2/manifest.json +62 -0
- package/airtable-clipper/releases/v1.0.2/popup.html +157 -0
- package/airtable-clipper/releases/v1.0.2/popup.js +567 -0
- package/airtable-clipper/releases/v1.0.2/sidepanel.html +25 -0
- package/airtable-clipper/releases/v1.0.2/styles/content.css +229 -0
- package/airtable-clipper/releases/v1.0.2/styles/popup.css +647 -0
- package/airtable-clipper/terms-of-service.md +124 -0
- package/airtable-clipper/test-credentials.md +61 -0
- package/airtable-clipper/test-extension/background.js +337 -0
- package/airtable-clipper/test-extension/base-setup.html +324 -0
- package/airtable-clipper/test-extension/base-setup.js +471 -0
- package/airtable-clipper/test-extension/content.js +873 -0
- package/airtable-clipper/test-extension/icons/README.md +69 -0
- package/airtable-clipper/test-extension/icons/icon-128.png +2 -0
- package/airtable-clipper/test-extension/icons/icon-16.png +3 -0
- package/airtable-clipper/test-extension/icons/icon-32.png +2 -0
- package/airtable-clipper/test-extension/icons/icon-48.png +2 -0
- package/airtable-clipper/test-extension/manifest.json +72 -0
- package/airtable-clipper/test-extension/popup.html +274 -0
- package/airtable-clipper/test-extension/popup.js +729 -0
- package/airtable-clipper/test-extension/sidepanel.html +25 -0
- package/airtable-clipper/test-extension/styles/content.css +229 -0
- package/airtable-clipper/test-extension/styles/popup.css +794 -0
- package/airtable_mcp_v2.js +1505 -0
- package/airtable_mcp_v2_oauth.js +1048 -0
- package/airtable_mcp_v3_advanced.js +1161 -0
- package/airtable_simple_production.js +532 -0
- package/docker-compose.production.yml +366 -0
- package/helm/airtable-mcp/Chart.yaml +122 -0
- package/helm/airtable-mcp/values.yaml +538 -0
- package/k8s/deployment.yaml +402 -0
- package/k8s/namespace.yaml +108 -0
- package/k8s/service.yaml +194 -0
- package/monitoring/alerts.yml +289 -0
- package/monitoring/prometheus.yml +224 -0
- package/package.json +6 -6
- package/.claude/settings.local.json +0 -12
- package/airtable-mcp-1.1.0.tgz +0 -0
- package/airtable_enhanced.js +0 -499
- package/airtable_simple_v1.2.4_backup.js +0 -277
- package/airtable_v1.4.0.js +0 -654
- package/rashidazarang-airtable-mcp-1.1.0.tgz +0 -0
- package/rashidazarang-airtable-mcp-1.2.0.tgz +0 -0
- package/rashidazarang-airtable-mcp-1.2.1.tgz +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Extension Icons
|
|
2
|
+
|
|
3
|
+
This directory contains the required icon files for the Chrome extension.
|
|
4
|
+
|
|
5
|
+
## Required Sizes
|
|
6
|
+
|
|
7
|
+
- **icon-16.png** (16x16) - Extension management page
|
|
8
|
+
- **icon-32.png** (32x32) - Extension management page & Windows
|
|
9
|
+
- **icon-48.png** (48x48) - Extensions page
|
|
10
|
+
- **icon-128.png** (128x128) - Chrome Web Store & install dialog
|
|
11
|
+
|
|
12
|
+
## Design Guidelines
|
|
13
|
+
|
|
14
|
+
### Visual Style
|
|
15
|
+
- **Symbol**: Simple paperclip or clipboard icon
|
|
16
|
+
- **Colors**: Airtable brand colors (blue #667eea to purple #764ba2 gradient)
|
|
17
|
+
- **Style**: Modern, clean, professional
|
|
18
|
+
- **Background**: Transparent PNG
|
|
19
|
+
|
|
20
|
+
### Technical Requirements
|
|
21
|
+
- **Format**: PNG with transparent background
|
|
22
|
+
- **Quality**: High resolution, crisp at all sizes
|
|
23
|
+
- **Colors**: Web-safe colors that work on light and dark themes
|
|
24
|
+
- **Consistency**: Same design scaled to different sizes
|
|
25
|
+
|
|
26
|
+
### Design Inspiration
|
|
27
|
+
The icon should represent:
|
|
28
|
+
- 📎 **Clipping/Saving**: Paperclip, clipboard, or save symbol
|
|
29
|
+
- 🔗 **Connection**: Link between web and Airtable
|
|
30
|
+
- ⚡ **Speed**: Quick, efficient data capture
|
|
31
|
+
- 🎯 **Precision**: Accurate data extraction
|
|
32
|
+
|
|
33
|
+
## Creating Icons
|
|
34
|
+
|
|
35
|
+
### Tools
|
|
36
|
+
- **Figma**: For vector-based design
|
|
37
|
+
- **Sketch**: Professional icon design
|
|
38
|
+
- **Adobe Illustrator**: Vector graphics
|
|
39
|
+
- **GIMP/Photoshop**: Raster editing
|
|
40
|
+
|
|
41
|
+
### Process
|
|
42
|
+
1. Design at highest resolution (128x128)
|
|
43
|
+
2. Use vector graphics for scalability
|
|
44
|
+
3. Export as PNG with transparent background
|
|
45
|
+
4. Test visibility on Chrome toolbar
|
|
46
|
+
5. Ensure clarity at 16x16 size
|
|
47
|
+
|
|
48
|
+
## Placeholder Status
|
|
49
|
+
|
|
50
|
+
⚠️ **Current files are placeholders**
|
|
51
|
+
|
|
52
|
+
The current icon files are text placeholders. For production deployment, replace with actual PNG icons following the design guidelines above.
|
|
53
|
+
|
|
54
|
+
## Quick Icon Generation
|
|
55
|
+
|
|
56
|
+
For rapid prototyping, you can generate simple icons using:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Create simple colored squares as placeholders
|
|
60
|
+
convert -size 16x16 xc:'#667eea' extension/icons/icon-16.png
|
|
61
|
+
convert -size 32x32 xc:'#667eea' extension/icons/icon-32.png
|
|
62
|
+
convert -size 48x48 xc:'#667eea' extension/icons/icon-48.png
|
|
63
|
+
convert -size 128x128 xc:'#667eea' extension/icons/icon-128.png
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Or use online icon generators:
|
|
67
|
+
- [Favicon.io](https://favicon.io/)
|
|
68
|
+
- [RealFaviconGenerator](https://realfavicongenerator.net/)
|
|
69
|
+
- [Canva Icon Maker](https://canva.com)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "Airtable Clipper",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "Save anything from the web to Airtable with one click. Perfect for CRM, research, and data collection.",
|
|
6
|
+
"author": "Rashid Azarang",
|
|
7
|
+
|
|
8
|
+
"permissions": [
|
|
9
|
+
"activeTab",
|
|
10
|
+
"storage",
|
|
11
|
+
"contextMenus",
|
|
12
|
+
"notifications",
|
|
13
|
+
"scripting"
|
|
14
|
+
],
|
|
15
|
+
|
|
16
|
+
"host_permissions": [
|
|
17
|
+
"https://api.airtable.com/*"
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
"background": {
|
|
21
|
+
"service_worker": "background.js",
|
|
22
|
+
"type": "module"
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
"action": {
|
|
26
|
+
"default_popup": "popup.html",
|
|
27
|
+
"default_icon": {
|
|
28
|
+
"16": "icons/icon-16.png",
|
|
29
|
+
"32": "icons/icon-32.png",
|
|
30
|
+
"48": "icons/icon-48.png",
|
|
31
|
+
"128": "icons/icon-128.png"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"side_panel": {
|
|
36
|
+
"default_path": "sidepanel.html"
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
"web_accessible_resources": [
|
|
40
|
+
{
|
|
41
|
+
"resources": [
|
|
42
|
+
"lib/*.js",
|
|
43
|
+
"styles/*.css",
|
|
44
|
+
"icons/*.png",
|
|
45
|
+
"base-setup.html",
|
|
46
|
+
"base-setup.js"
|
|
47
|
+
],
|
|
48
|
+
"matches": ["https://api.airtable.com/*"]
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
|
|
52
|
+
"icons": {
|
|
53
|
+
"16": "icons/icon-16.png",
|
|
54
|
+
"32": "icons/icon-32.png",
|
|
55
|
+
"48": "icons/icon-48.png",
|
|
56
|
+
"128": "icons/icon-128.png"
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
"content_security_policy": {
|
|
60
|
+
"extension_pages": "script-src 'self'; object-src 'self';"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Airtable Clipper</title>
|
|
7
|
+
<link rel="stylesheet" href="styles/popup.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<!-- Connection State: Not Connected -->
|
|
11
|
+
<div class="popup-container" id="setupView">
|
|
12
|
+
<div class="header-simple">
|
|
13
|
+
<h2>Airtable Clipper</h2>
|
|
14
|
+
<p class="subtitle">Save web content to your Airtable</p>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="setup-form">
|
|
18
|
+
<div class="setup-steps">
|
|
19
|
+
<h3>Get Started in 2 Steps</h3>
|
|
20
|
+
<div class="step">
|
|
21
|
+
<div class="step-number">1</div>
|
|
22
|
+
<div class="step-content">
|
|
23
|
+
<p><strong>Get your Personal Access Token</strong></p>
|
|
24
|
+
<a href="https://airtable.com/create/tokens" target="_blank" class="help-link">
|
|
25
|
+
Create token at airtable.com/create/tokens →
|
|
26
|
+
</a>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="step">
|
|
30
|
+
<div class="step-number">2</div>
|
|
31
|
+
<div class="step-content">
|
|
32
|
+
<p><strong>Get your Base ID</strong></p>
|
|
33
|
+
<p class="help-text">Found in your Airtable URL: airtable.com/<span class="highlight">appXXXXXX</span>/...</p>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div class="connect-form">
|
|
39
|
+
<div class="input-group">
|
|
40
|
+
<input type="password" id="airtableToken" placeholder="Personal Access Token (pat...)" class="token-input">
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div class="input-group">
|
|
44
|
+
<input type="text" id="baseId" placeholder="Base ID (app...)" class="base-input">
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<button class="connect-btn" id="connectBtn">
|
|
48
|
+
<span class="btn-text">Connect to Airtable</span>
|
|
49
|
+
<span class="btn-spinner" id="connectSpinner"></span>
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="quick-setup">
|
|
54
|
+
<p>Don't have a base yet?</p>
|
|
55
|
+
<button class="setup-btn" id="setupBtn">Create optimized database</button>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<!-- Connection State: Connected -->
|
|
61
|
+
<div class="popup-container connected" id="connectedView" style="display: none;">
|
|
62
|
+
<div class="header-connected">
|
|
63
|
+
<div class="site-info">
|
|
64
|
+
<div class="site-icon" id="siteIcon">🌐</div>
|
|
65
|
+
<div class="site-details">
|
|
66
|
+
<div class="site-name" id="siteName">Current Page</div>
|
|
67
|
+
<div class="site-url" id="siteUrl">example.com</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="connection-indicator">
|
|
71
|
+
<div class="status-dot connected"></div>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div class="actions">
|
|
76
|
+
<!-- Primary Save Action -->
|
|
77
|
+
<button class="save-btn primary" id="quickSaveBtn">
|
|
78
|
+
<span class="save-icon">📎</span>
|
|
79
|
+
<div class="save-content">
|
|
80
|
+
<span class="save-text">Save Page</span>
|
|
81
|
+
<span class="save-subtitle" id="saveSubtitle">to Web Clips</span>
|
|
82
|
+
</div>
|
|
83
|
+
</button>
|
|
84
|
+
|
|
85
|
+
<!-- Secondary Actions -->
|
|
86
|
+
<div class="secondary-actions" id="secondaryActions">
|
|
87
|
+
<button class="action-btn" id="linkedinBtn" style="display: none;">
|
|
88
|
+
<span class="action-icon">👤</span>
|
|
89
|
+
<span class="action-text">Save Profile</span>
|
|
90
|
+
</button>
|
|
91
|
+
|
|
92
|
+
<button class="action-btn" id="bulkBtn">
|
|
93
|
+
<span class="action-icon">📋</span>
|
|
94
|
+
<span class="action-text">Select Multiple</span>
|
|
95
|
+
</button>
|
|
96
|
+
|
|
97
|
+
<button class="action-btn" id="settingsBtn">
|
|
98
|
+
<span class="action-icon">⚙️</span>
|
|
99
|
+
<span class="action-text">Settings</span>
|
|
100
|
+
</button>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<!-- Settings Panel -->
|
|
105
|
+
<div class="settings-panel" id="settingsPanel" style="display: none;">
|
|
106
|
+
<div class="settings-header">
|
|
107
|
+
<h3>Settings</h3>
|
|
108
|
+
<button class="close-btn" id="closeSettings">×</button>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="setting-item">
|
|
112
|
+
<label>Default Table</label>
|
|
113
|
+
<select id="defaultTable">
|
|
114
|
+
<option value="Web Clips">Web Clips</option>
|
|
115
|
+
</select>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<div class="setting-item">
|
|
119
|
+
<label>LinkedIn Table</label>
|
|
120
|
+
<select id="linkedinTable">
|
|
121
|
+
<option value="Contacts">Contacts</option>
|
|
122
|
+
</select>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div class="setting-item">
|
|
126
|
+
<label class="toggle-label">
|
|
127
|
+
<input type="checkbox" id="autoSave">
|
|
128
|
+
<span class="toggle-switch"></span>
|
|
129
|
+
Auto-save LinkedIn profiles
|
|
130
|
+
</label>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<div class="setting-item">
|
|
134
|
+
<label class="toggle-label">
|
|
135
|
+
<input type="checkbox" id="notifications" checked>
|
|
136
|
+
<span class="toggle-switch"></span>
|
|
137
|
+
Show notifications
|
|
138
|
+
</label>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div class="setting-item">
|
|
142
|
+
<button class="disconnect-btn" id="disconnectBtn">Disconnect</button>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<!-- Status Messages -->
|
|
148
|
+
<div class="toast" id="toast">
|
|
149
|
+
<div class="toast-content">
|
|
150
|
+
<span class="toast-icon" id="toastIcon">✅</span>
|
|
151
|
+
<span class="toast-message" id="toastMessage">Success!</span>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
|
|
155
|
+
<script src="popup.js" type="module"></script>
|
|
156
|
+
</body>
|
|
157
|
+
</html>
|