@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.
- package/README.md +1 -1
- package/airtable_simple_production.js +387 -5
- package/examples/claude_simple_config.json +0 -9
- package/package.json +10 -1
- package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -173
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
- package/.github/ISSUE_TEMPLATE/custom.md +0 -10
- package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -209
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
- package/.github/ISSUE_TEMPLATE/security-report.yml +0 -216
- package/.github/pull_request_template.md +0 -245
- package/.github/workflows/ci-cd.yml +0 -408
- package/.github/workflows/security-audit.yml +0 -316
- package/API_DOCUMENTATION.md +0 -897
- package/CAPABILITY_REPORT.md +0 -118
- package/CLAUDE_INTEGRATION.md +0 -96
- package/CODE_OF_CONDUCT.md +0 -181
- package/CONTRIBUTING.md +0 -81
- package/DEVELOPMENT.md +0 -190
- package/Dockerfile +0 -39
- package/Dockerfile.node +0 -20
- package/Dockerfile.production +0 -127
- package/IMPROVEMENT_PROPOSAL.md +0 -371
- package/INSTALLATION.md +0 -183
- package/ISSUE_RESPONSES.md +0 -171
- package/MCP_REVIEW_SUMMARY.md +0 -142
- package/QUICK_START.md +0 -60
- package/RELEASE_NOTES_v1.2.0.md +0 -50
- package/RELEASE_NOTES_v1.2.1.md +0 -40
- package/RELEASE_NOTES_v1.2.2.md +0 -48
- package/RELEASE_NOTES_v1.2.3.md +0 -105
- package/RELEASE_NOTES_v1.2.4.md +0 -60
- package/RELEASE_NOTES_v1.4.0.md +0 -104
- package/RELEASE_NOTES_v1.5.0.md +0 -185
- package/RELEASE_NOTES_v1.6.0.md +0 -248
- package/SECURITY_NOTICE.md +0 -40
- package/airtable-clipper/CHANGELOG.md +0 -198
- package/airtable-clipper/CHROME_STORE_SUBMISSION.md +0 -343
- package/airtable-clipper/LAUNCH_STRATEGY.md +0 -495
- package/airtable-clipper/LICENSE +0 -21
- package/airtable-clipper/OAUTH_SETUP.md +0 -51
- package/airtable-clipper/PRIVACY_POLICY.md +0 -187
- package/airtable-clipper/README.md +0 -575
- package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +0 -273
- package/airtable-clipper/build.sh +0 -85
- package/airtable-clipper/docs/QUICK_START.md +0 -99
- package/airtable-clipper/docs/SETUP.md +0 -291
- package/airtable-clipper/extension/background.js +0 -337
- package/airtable-clipper/extension/base-setup.html +0 -324
- package/airtable-clipper/extension/base-setup.js +0 -471
- package/airtable-clipper/extension/content.js +0 -771
- package/airtable-clipper/extension/icons/README.md +0 -69
- package/airtable-clipper/extension/icons/icon-16.png +0 -3
- package/airtable-clipper/extension/manifest.json +0 -73
- package/airtable-clipper/extension/popup.html +0 -144
- package/airtable-clipper/extension/popup.js +0 -475
- package/airtable-clipper/extension/styles/content.css +0 -229
- package/airtable-clipper/extension/styles/popup.css +0 -477
- package/airtable-clipper/privacy-policy.md +0 -63
- package/airtable-clipper/releases/v1.0.0/background.js +0 -337
- package/airtable-clipper/releases/v1.0.0/base-setup.html +0 -324
- package/airtable-clipper/releases/v1.0.0/base-setup.js +0 -471
- package/airtable-clipper/releases/v1.0.0/content.js +0 -771
- package/airtable-clipper/releases/v1.0.0/icons/README.md +0 -69
- package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +0 -2
- package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +0 -3
- package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +0 -2
- package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +0 -2
- package/airtable-clipper/releases/v1.0.0/manifest.json +0 -73
- package/airtable-clipper/releases/v1.0.0/popup.html +0 -144
- package/airtable-clipper/releases/v1.0.0/popup.js +0 -475
- package/airtable-clipper/releases/v1.0.0/sidepanel.html +0 -25
- package/airtable-clipper/releases/v1.0.0/styles/content.css +0 -229
- package/airtable-clipper/releases/v1.0.0/styles/popup.css +0 -477
- package/airtable-clipper/releases/v1.0.1/background.js +0 -337
- package/airtable-clipper/releases/v1.0.1/base-setup.html +0 -324
- package/airtable-clipper/releases/v1.0.1/base-setup.js +0 -471
- package/airtable-clipper/releases/v1.0.1/content.js +0 -771
- package/airtable-clipper/releases/v1.0.1/icons/README.md +0 -69
- package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +0 -2
- package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +0 -3
- package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +0 -2
- package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +0 -2
- package/airtable-clipper/releases/v1.0.1/manifest.json +0 -70
- package/airtable-clipper/releases/v1.0.1/popup.html +0 -157
- package/airtable-clipper/releases/v1.0.1/popup.js +0 -562
- package/airtable-clipper/releases/v1.0.1/sidepanel.html +0 -25
- package/airtable-clipper/releases/v1.0.1/styles/content.css +0 -229
- package/airtable-clipper/releases/v1.0.1/styles/popup.css +0 -647
- package/airtable-clipper/releases/v1.0.2/background.js +0 -337
- package/airtable-clipper/releases/v1.0.2/base-setup.html +0 -324
- package/airtable-clipper/releases/v1.0.2/base-setup.js +0 -471
- package/airtable-clipper/releases/v1.0.2/content.js +0 -771
- package/airtable-clipper/releases/v1.0.2/icons/README.md +0 -69
- package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +0 -2
- package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +0 -3
- package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +0 -2
- package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +0 -2
- package/airtable-clipper/releases/v1.0.2/manifest.json +0 -62
- package/airtable-clipper/releases/v1.0.2/popup.html +0 -157
- package/airtable-clipper/releases/v1.0.2/popup.js +0 -567
- package/airtable-clipper/releases/v1.0.2/sidepanel.html +0 -25
- package/airtable-clipper/releases/v1.0.2/styles/content.css +0 -229
- package/airtable-clipper/releases/v1.0.2/styles/popup.css +0 -647
- package/airtable-clipper/terms-of-service.md +0 -124
- package/airtable-clipper/test-credentials.md +0 -61
- package/airtable-clipper/test-extension/background.js +0 -337
- package/airtable-clipper/test-extension/base-setup.html +0 -324
- package/airtable-clipper/test-extension/base-setup.js +0 -471
- package/airtable-clipper/test-extension/content.js +0 -873
- package/airtable-clipper/test-extension/icons/README.md +0 -69
- package/airtable-clipper/test-extension/icons/icon-128.png +0 -2
- package/airtable-clipper/test-extension/icons/icon-16.png +0 -3
- package/airtable-clipper/test-extension/icons/icon-32.png +0 -2
- package/airtable-clipper/test-extension/icons/icon-48.png +0 -2
- package/airtable-clipper/test-extension/manifest.json +0 -72
- package/airtable-clipper/test-extension/popup.html +0 -274
- package/airtable-clipper/test-extension/popup.js +0 -729
- package/airtable-clipper/test-extension/sidepanel.html +0 -25
- package/airtable-clipper/test-extension/styles/content.css +0 -229
- package/airtable-clipper/test-extension/styles/popup.css +0 -794
- package/airtable_mcp/__init__.py +0 -5
- package/airtable_mcp/src/server.py +0 -329
- package/airtable_mcp_v2.js +0 -1505
- package/airtable_mcp_v2_oauth.js +0 -1048
- package/airtable_mcp_v3_advanced.js +0 -1161
- package/cleanup.sh +0 -71
- package/docker-compose.production.yml +0 -366
- package/helm/airtable-mcp/Chart.yaml +0 -122
- package/helm/airtable-mcp/values.yaml +0 -538
- package/index.js +0 -179
- package/inspector.py +0 -148
- package/inspector_server.py +0 -337
- package/k8s/deployment.yaml +0 -402
- package/k8s/namespace.yaml +0 -108
- package/k8s/service.yaml +0 -194
- package/monitoring/alerts.yml +0 -289
- package/monitoring/prometheus.yml +0 -224
- package/publish-steps.txt +0 -27
- package/quick_test.sh +0 -30
- package/requirements.txt +0 -10
- package/setup.py +0 -29
- package/simple_airtable_server.py +0 -151
- package/smithery.yaml +0 -45
- package/test_all_features.sh +0 -146
- package/test_all_operations.sh +0 -120
- package/test_client.py +0 -70
- package/test_enhanced_features.js +0 -389
- package/test_mcp_comprehensive.js +0 -163
- package/test_mock_server.js +0 -180
- package/test_v1.4.0_final.sh +0 -131
- package/test_v1.5.0_comprehensive.sh +0 -96
- package/test_v1.5.0_final.sh +0 -224
- package/test_v1.6.0_comprehensive.sh +0 -187
- package/test_webhooks.sh +0 -105
package/API_DOCUMENTATION.md
DELETED
|
@@ -1,897 +0,0 @@
|
|
|
1
|
-
# ๐ Airtable MCP Server API Documentation v2.1
|
|
2
|
-
|
|
3
|
-
## ๐ Overview
|
|
4
|
-
|
|
5
|
-
The Enhanced Airtable MCP Server v2.1 provides a comprehensive Model Context Protocol implementation with OAuth2 authentication, enterprise security features, and complete Airtable API integration.
|
|
6
|
-
|
|
7
|
-
**๐ฏ Trust Score**: Contributing to our **100/100 Trust Score** goal through complete documentation coverage.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## ๐ง Quick Start
|
|
12
|
-
|
|
13
|
-
### ๐ณ Docker (Recommended)
|
|
14
|
-
```bash
|
|
15
|
-
docker run -p 8010:8010 \
|
|
16
|
-
-e AIRTABLE_TOKEN=your_token \
|
|
17
|
-
-e AIRTABLE_BASE_ID=your_base_id \
|
|
18
|
-
rashidazarang/airtable-mcp:latest
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### ๐ฆ NPM Installation
|
|
22
|
-
```bash
|
|
23
|
-
npm install -g @rashidazarang/airtable-mcp
|
|
24
|
-
airtable-mcp --token YOUR_TOKEN --base YOUR_BASE_ID
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### ๐จ Local Development
|
|
28
|
-
```bash
|
|
29
|
-
git clone https://github.com/rashidazarang/airtable-mcp.git
|
|
30
|
-
cd airtable-mcp
|
|
31
|
-
npm install
|
|
32
|
-
node airtable_mcp_v2_oauth.js --token YOUR_TOKEN --base YOUR_BASE_ID
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## ๐ API Endpoints
|
|
38
|
-
|
|
39
|
-
### Base URL
|
|
40
|
-
```
|
|
41
|
-
http://localhost:8010
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Core Endpoints
|
|
45
|
-
|
|
46
|
-
| Endpoint | Method | Description | Auth Required |
|
|
47
|
-
|----------|--------|-------------|---------------|
|
|
48
|
-
| `/mcp` | POST | MCP protocol endpoint | โ
|
|
|
49
|
-
| `/health` | GET | Health check | โ |
|
|
50
|
-
| `/docs` | GET | Interactive documentation | โ |
|
|
51
|
-
| `/oauth/authorize` | GET | OAuth2 authorization | โ |
|
|
52
|
-
| `/oauth/callback` | GET | OAuth2 callback | โ |
|
|
53
|
-
|
|
54
|
-
---
|
|
55
|
-
|
|
56
|
-
## ๐ Authentication
|
|
57
|
-
|
|
58
|
-
### ๐ API Token (Simple)
|
|
59
|
-
```bash
|
|
60
|
-
export AIRTABLE_TOKEN="patXXXXXXXXXXXXXXXX"
|
|
61
|
-
export AIRTABLE_BASE_ID="appXXXXXXXXXXXXXXXX"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### ๐ก๏ธ OAuth2 (Recommended)
|
|
65
|
-
```bash
|
|
66
|
-
# 1. Start server
|
|
67
|
-
node airtable_mcp_v2_oauth.js
|
|
68
|
-
|
|
69
|
-
# 2. Visit authorization URL
|
|
70
|
-
curl http://localhost:8010/oauth/authorize
|
|
71
|
-
|
|
72
|
-
# 3. Complete OAuth flow
|
|
73
|
-
# Server will handle token exchange automatically
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### ๐ Environment Variables
|
|
77
|
-
```bash
|
|
78
|
-
# Required
|
|
79
|
-
AIRTABLE_TOKEN=your_personal_access_token
|
|
80
|
-
AIRTABLE_BASE_ID=your_base_id
|
|
81
|
-
|
|
82
|
-
# Optional OAuth2
|
|
83
|
-
AIRTABLE_CLIENT_ID=your_oauth_client_id
|
|
84
|
-
AIRTABLE_CLIENT_SECRET=your_oauth_client_secret
|
|
85
|
-
OAUTH_REDIRECT_URI=http://localhost:8010/oauth/callback
|
|
86
|
-
|
|
87
|
-
# Optional Configuration
|
|
88
|
-
LOG_LEVEL=INFO
|
|
89
|
-
PORT=8010
|
|
90
|
-
HOST=localhost
|
|
91
|
-
ALLOWED_ORIGINS=*
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## ๐ MCP Protocol Implementation
|
|
97
|
-
|
|
98
|
-
### ๐ Initialization
|
|
99
|
-
|
|
100
|
-
**Request:**
|
|
101
|
-
```json
|
|
102
|
-
{
|
|
103
|
-
"jsonrpc": "2.0",
|
|
104
|
-
"id": 1,
|
|
105
|
-
"method": "initialize",
|
|
106
|
-
"params": {
|
|
107
|
-
"protocolVersion": "2024-11-05",
|
|
108
|
-
"capabilities": {
|
|
109
|
-
"roots": {}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
**Response:**
|
|
116
|
-
```json
|
|
117
|
-
{
|
|
118
|
-
"jsonrpc": "2.0",
|
|
119
|
-
"id": 1,
|
|
120
|
-
"result": {
|
|
121
|
-
"protocolVersion": "2024-11-05",
|
|
122
|
-
"capabilities": {
|
|
123
|
-
"tools": { "listChanged": true },
|
|
124
|
-
"resources": { "subscribe": true, "listChanged": true },
|
|
125
|
-
"prompts": { "listChanged": true },
|
|
126
|
-
"sampling": {},
|
|
127
|
-
"roots": { "listChanged": true },
|
|
128
|
-
"logging": {},
|
|
129
|
-
"authentication": { "oauth2": true, "apiKey": true }
|
|
130
|
-
},
|
|
131
|
-
"serverInfo": {
|
|
132
|
-
"name": "Enhanced Airtable MCP Server v2.1",
|
|
133
|
-
"version": "2.1.0",
|
|
134
|
-
"description": "Complete MCP protocol with OAuth2, security, and enterprise features"
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## ๐ ๏ธ Tools API
|
|
143
|
-
|
|
144
|
-
### ๐ List Available Tools
|
|
145
|
-
|
|
146
|
-
**Request:**
|
|
147
|
-
```json
|
|
148
|
-
{
|
|
149
|
-
"jsonrpc": "2.0",
|
|
150
|
-
"id": 2,
|
|
151
|
-
"method": "tools/list"
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
**Response:**
|
|
156
|
-
```json
|
|
157
|
-
{
|
|
158
|
-
"jsonrpc": "2.0",
|
|
159
|
-
"id": 2,
|
|
160
|
-
"result": {
|
|
161
|
-
"tools": [
|
|
162
|
-
{
|
|
163
|
-
"name": "list_tables",
|
|
164
|
-
"description": "List all tables in the Airtable base with enhanced metadata",
|
|
165
|
-
"inputSchema": {
|
|
166
|
-
"type": "object",
|
|
167
|
-
"properties": {
|
|
168
|
-
"include_schema": {
|
|
169
|
-
"type": "boolean",
|
|
170
|
-
"description": "Include detailed field schema information",
|
|
171
|
-
"default": false
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"name": "oauth_authorize",
|
|
178
|
-
"description": "Initiate OAuth2 authorization flow for enhanced security",
|
|
179
|
-
"inputSchema": {
|
|
180
|
-
"type": "object",
|
|
181
|
-
"properties": {
|
|
182
|
-
"redirect_uri": {
|
|
183
|
-
"type": "string",
|
|
184
|
-
"description": "OAuth redirect URI (optional)",
|
|
185
|
-
"format": "uri"
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
]
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### ๐ง Execute Tool
|
|
196
|
-
|
|
197
|
-
**Request:**
|
|
198
|
-
```json
|
|
199
|
-
{
|
|
200
|
-
"jsonrpc": "2.0",
|
|
201
|
-
"id": 3,
|
|
202
|
-
"method": "tools/call",
|
|
203
|
-
"params": {
|
|
204
|
-
"name": "list_tables",
|
|
205
|
-
"arguments": {
|
|
206
|
-
"include_schema": true
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
**Response:**
|
|
213
|
-
```json
|
|
214
|
-
{
|
|
215
|
-
"jsonrpc": "2.0",
|
|
216
|
-
"id": 3,
|
|
217
|
-
"result": {
|
|
218
|
-
"content": [
|
|
219
|
-
{
|
|
220
|
-
"type": "text",
|
|
221
|
-
"text": "๐ **Found 4 table(s):**\n\n**1. Tasks**\n โข ID: `tblXXXXXXXXXXXXXXXX`\n โข Fields: 5\n โข Schema: Name (singleLineText), Status (singleSelect), Priority (singleSelect), Due Date (date), Notes (longText)"
|
|
222
|
-
}
|
|
223
|
-
]
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
---
|
|
229
|
-
|
|
230
|
-
## ๐ ๏ธ Available Tools Reference
|
|
231
|
-
|
|
232
|
-
### ๐ Data Operations
|
|
233
|
-
|
|
234
|
-
#### ๐๏ธ list_tables
|
|
235
|
-
Lists all tables in your Airtable base with optional schema information.
|
|
236
|
-
|
|
237
|
-
**Parameters:**
|
|
238
|
-
- `include_schema` (boolean, optional): Include detailed field schema information
|
|
239
|
-
|
|
240
|
-
**Example:**
|
|
241
|
-
```bash
|
|
242
|
-
curl -X POST http://localhost:8010/mcp \
|
|
243
|
-
-H "Content-Type: application/json" \
|
|
244
|
-
-d '{
|
|
245
|
-
"jsonrpc": "2.0",
|
|
246
|
-
"id": 1,
|
|
247
|
-
"method": "tools/call",
|
|
248
|
-
"params": {
|
|
249
|
-
"name": "list_tables",
|
|
250
|
-
"arguments": {
|
|
251
|
-
"include_schema": true
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}'
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
#### ๐ list_records
|
|
258
|
-
Retrieves records from a specific table with filtering and pagination.
|
|
259
|
-
|
|
260
|
-
**Parameters:**
|
|
261
|
-
- `table` (string, required): Table name or ID
|
|
262
|
-
- `maxRecords` (number, optional): Maximum number of records to return
|
|
263
|
-
- `view` (string, optional): View name or ID
|
|
264
|
-
- `filterByFormula` (string, optional): Airtable formula for filtering
|
|
265
|
-
|
|
266
|
-
**Example:**
|
|
267
|
-
```bash
|
|
268
|
-
curl -X POST http://localhost:8010/mcp \
|
|
269
|
-
-H "Content-Type: application/json" \
|
|
270
|
-
-d '{
|
|
271
|
-
"jsonrpc": "2.0",
|
|
272
|
-
"id": 2,
|
|
273
|
-
"method": "tools/call",
|
|
274
|
-
"params": {
|
|
275
|
-
"name": "list_records",
|
|
276
|
-
"arguments": {
|
|
277
|
-
"table": "Tasks",
|
|
278
|
-
"maxRecords": 10,
|
|
279
|
-
"filterByFormula": "AND({Status} = \"Active\", {Priority} = \"High\")"
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}'
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### ๐ Security & Authentication
|
|
286
|
-
|
|
287
|
-
#### ๐ก๏ธ oauth_authorize
|
|
288
|
-
Initiates OAuth2 authorization flow for enhanced security.
|
|
289
|
-
|
|
290
|
-
**Parameters:**
|
|
291
|
-
- `redirect_uri` (string, optional): Custom redirect URI
|
|
292
|
-
|
|
293
|
-
**Example:**
|
|
294
|
-
```bash
|
|
295
|
-
curl -X POST http://localhost:8010/mcp \
|
|
296
|
-
-H "Content-Type: application/json" \
|
|
297
|
-
-d '{
|
|
298
|
-
"jsonrpc": "2.0",
|
|
299
|
-
"id": 3,
|
|
300
|
-
"method": "tools/call",
|
|
301
|
-
"params": {
|
|
302
|
-
"name": "oauth_authorize",
|
|
303
|
-
"arguments": {}
|
|
304
|
-
}
|
|
305
|
-
}'
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
#### ๐ oauth_status
|
|
309
|
-
Checks current OAuth2 authentication status.
|
|
310
|
-
|
|
311
|
-
**Example:**
|
|
312
|
-
```bash
|
|
313
|
-
curl -X POST http://localhost:8010/mcp \
|
|
314
|
-
-H "Content-Type: application/json" \
|
|
315
|
-
-d '{
|
|
316
|
-
"jsonrpc": "2.0",
|
|
317
|
-
"id": 4,
|
|
318
|
-
"method": "tools/call",
|
|
319
|
-
"params": {
|
|
320
|
-
"name": "oauth_status",
|
|
321
|
-
"arguments": {}
|
|
322
|
-
}
|
|
323
|
-
}'
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
#### ๐ก๏ธ security_audit
|
|
327
|
-
Performs comprehensive security audit of current configuration.
|
|
328
|
-
|
|
329
|
-
**Parameters:**
|
|
330
|
-
- `include_tokens` (boolean, optional): Include token validation in audit
|
|
331
|
-
|
|
332
|
-
**Example:**
|
|
333
|
-
```bash
|
|
334
|
-
curl -X POST http://localhost:8010/mcp \
|
|
335
|
-
-H "Content-Type: application/json" \
|
|
336
|
-
-d '{
|
|
337
|
-
"jsonrpc": "2.0",
|
|
338
|
-
"id": 5,
|
|
339
|
-
"method": "tools/call",
|
|
340
|
-
"params": {
|
|
341
|
-
"name": "security_audit",
|
|
342
|
-
"arguments": {
|
|
343
|
-
"include_tokens": false
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}'
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
---
|
|
350
|
-
|
|
351
|
-
## ๐ Resources API
|
|
352
|
-
|
|
353
|
-
### ๐ List Resources
|
|
354
|
-
|
|
355
|
-
**Request:**
|
|
356
|
-
```json
|
|
357
|
-
{
|
|
358
|
-
"jsonrpc": "2.0",
|
|
359
|
-
"id": 6,
|
|
360
|
-
"method": "resources/list"
|
|
361
|
-
}
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
**Response:**
|
|
365
|
-
```json
|
|
366
|
-
{
|
|
367
|
-
"jsonrpc": "2.0",
|
|
368
|
-
"id": 6,
|
|
369
|
-
"result": {
|
|
370
|
-
"resources": [
|
|
371
|
-
{
|
|
372
|
-
"uri": "airtable://schema/appXXXXXXXXXXXXXXXX",
|
|
373
|
-
"name": "Base Schema",
|
|
374
|
-
"description": "Complete schema information for your Airtable base",
|
|
375
|
-
"mimeType": "application/json"
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
"uri": "airtable://docs/api",
|
|
379
|
-
"name": "API Documentation",
|
|
380
|
-
"description": "Interactive API documentation and examples",
|
|
381
|
-
"mimeType": "text/markdown"
|
|
382
|
-
}
|
|
383
|
-
]
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
### ๐ Read Resource
|
|
389
|
-
|
|
390
|
-
**Request:**
|
|
391
|
-
```json
|
|
392
|
-
{
|
|
393
|
-
"jsonrpc": "2.0",
|
|
394
|
-
"id": 7,
|
|
395
|
-
"method": "resources/read",
|
|
396
|
-
"params": {
|
|
397
|
-
"uri": "airtable://schema/appXXXXXXXXXXXXXXXX"
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
---
|
|
403
|
-
|
|
404
|
-
## ๐ฌ Prompts API
|
|
405
|
-
|
|
406
|
-
### ๐ List Prompts
|
|
407
|
-
|
|
408
|
-
**Request:**
|
|
409
|
-
```json
|
|
410
|
-
{
|
|
411
|
-
"jsonrpc": "2.0",
|
|
412
|
-
"id": 8,
|
|
413
|
-
"method": "prompts/list"
|
|
414
|
-
}
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
**Response:**
|
|
418
|
-
```json
|
|
419
|
-
{
|
|
420
|
-
"jsonrpc": "2.0",
|
|
421
|
-
"id": 8,
|
|
422
|
-
"result": {
|
|
423
|
-
"prompts": [
|
|
424
|
-
{
|
|
425
|
-
"id": "data_analysis_assistant",
|
|
426
|
-
"name": "Data Analysis Assistant",
|
|
427
|
-
"description": "AI-powered data analysis for your Airtable base"
|
|
428
|
-
},
|
|
429
|
-
{
|
|
430
|
-
"id": "schema_optimization_advisor",
|
|
431
|
-
"name": "Schema Optimization Advisor",
|
|
432
|
-
"description": "Get AI recommendations for optimizing your base structure"
|
|
433
|
-
}
|
|
434
|
-
]
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
### ๐ค Execute Prompt
|
|
440
|
-
|
|
441
|
-
**Request:**
|
|
442
|
-
```json
|
|
443
|
-
{
|
|
444
|
-
"jsonrpc": "2.0",
|
|
445
|
-
"id": 9,
|
|
446
|
-
"method": "prompts/get",
|
|
447
|
-
"params": {
|
|
448
|
-
"name": "data_analysis_assistant",
|
|
449
|
-
"arguments": {
|
|
450
|
-
"table": "Sales",
|
|
451
|
-
"analysis_type": "trends"
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
---
|
|
458
|
-
|
|
459
|
-
## ๐ Logging API
|
|
460
|
-
|
|
461
|
-
### ๐ง Set Log Level
|
|
462
|
-
|
|
463
|
-
**Request:**
|
|
464
|
-
```json
|
|
465
|
-
{
|
|
466
|
-
"jsonrpc": "2.0",
|
|
467
|
-
"id": 10,
|
|
468
|
-
"method": "logging/setLevel",
|
|
469
|
-
"params": {
|
|
470
|
-
"level": "DEBUG"
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
```
|
|
474
|
-
|
|
475
|
-
**Response:**
|
|
476
|
-
```json
|
|
477
|
-
{
|
|
478
|
-
"jsonrpc": "2.0",
|
|
479
|
-
"id": 10,
|
|
480
|
-
"result": {
|
|
481
|
-
"level": "DEBUG",
|
|
482
|
-
"previousLevel": "INFO",
|
|
483
|
-
"availableLevels": ["ERROR", "WARN", "INFO", "DEBUG", "TRACE"]
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
```
|
|
487
|
-
|
|
488
|
-
---
|
|
489
|
-
|
|
490
|
-
## ๐ก๏ธ Security Features
|
|
491
|
-
|
|
492
|
-
### ๐ฆ Rate Limiting
|
|
493
|
-
- **Limit**: 60 requests per minute per client
|
|
494
|
-
- **Headers**: `X-RateLimit-Remaining`, `X-RateLimit-Reset`
|
|
495
|
-
- **Response**: HTTP 429 when exceeded
|
|
496
|
-
|
|
497
|
-
### ๐ Security Headers
|
|
498
|
-
```http
|
|
499
|
-
X-Content-Type-Options: nosniff
|
|
500
|
-
X-Frame-Options: DENY
|
|
501
|
-
X-XSS-Protection: 1; mode=block
|
|
502
|
-
Strict-Transport-Security: max-age=31536000; includeSubDomains
|
|
503
|
-
Content-Security-Policy: default-src 'self'; script-src 'self'
|
|
504
|
-
```
|
|
505
|
-
|
|
506
|
-
### โ
Input Validation
|
|
507
|
-
- **JSON Schema Validation**: All inputs validated against schema
|
|
508
|
-
- **Sanitization**: XSS prevention and input cleaning
|
|
509
|
-
- **Length Limits**: Reasonable limits on input sizes
|
|
510
|
-
- **Type Checking**: Strict type validation
|
|
511
|
-
|
|
512
|
-
---
|
|
513
|
-
|
|
514
|
-
## ๐ Monitoring & Health
|
|
515
|
-
|
|
516
|
-
### ๐ฅ Health Check
|
|
517
|
-
|
|
518
|
-
**Request:**
|
|
519
|
-
```bash
|
|
520
|
-
curl http://localhost:8010/health
|
|
521
|
-
```
|
|
522
|
-
|
|
523
|
-
**Response:**
|
|
524
|
-
```json
|
|
525
|
-
{
|
|
526
|
-
"status": "healthy",
|
|
527
|
-
"version": "2.1.0",
|
|
528
|
-
"features": ["oauth2", "security", "rate-limiting"],
|
|
529
|
-
"uptime": 3600.123,
|
|
530
|
-
"timestamp": "2025-08-16T00:00:00.000Z"
|
|
531
|
-
}
|
|
532
|
-
```
|
|
533
|
-
|
|
534
|
-
### ๐ Metrics
|
|
535
|
-
```bash
|
|
536
|
-
# Server metrics
|
|
537
|
-
curl http://localhost:8010/metrics
|
|
538
|
-
|
|
539
|
-
# Detailed health info
|
|
540
|
-
curl http://localhost:8010/health?detailed=true
|
|
541
|
-
```
|
|
542
|
-
|
|
543
|
-
---
|
|
544
|
-
|
|
545
|
-
## ๐จ Error Handling
|
|
546
|
-
|
|
547
|
-
### Error Response Format
|
|
548
|
-
```json
|
|
549
|
-
{
|
|
550
|
-
"jsonrpc": "2.0",
|
|
551
|
-
"id": 1,
|
|
552
|
-
"error": {
|
|
553
|
-
"code": -32000,
|
|
554
|
-
"message": "Rate limit exceeded. Maximum 60 requests per minute.",
|
|
555
|
-
"data": {
|
|
556
|
-
"type": "RateLimitError",
|
|
557
|
-
"retryAfter": 60,
|
|
558
|
-
"limit": 60,
|
|
559
|
-
"remaining": 0
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
```
|
|
564
|
-
|
|
565
|
-
### Common Error Codes
|
|
566
|
-
|
|
567
|
-
| Code | Description | HTTP Status |
|
|
568
|
-
|------|-------------|-------------|
|
|
569
|
-
| -32700 | Parse error | 400 |
|
|
570
|
-
| -32600 | Invalid Request | 400 |
|
|
571
|
-
| -32601 | Method not found | 404 |
|
|
572
|
-
| -32602 | Invalid params | 400 |
|
|
573
|
-
| -32603 | Internal error | 500 |
|
|
574
|
-
| -32000 | Server error | 500 |
|
|
575
|
-
|
|
576
|
-
### Airtable-Specific Errors
|
|
577
|
-
|
|
578
|
-
| Code | Description | Solution |
|
|
579
|
-
|------|-------------|----------|
|
|
580
|
-
| 401 | Invalid token | Check your Personal Access Token |
|
|
581
|
-
| 403 | Permission denied | Verify token scopes |
|
|
582
|
-
| 404 | Base/table not found | Check Base ID and table names |
|
|
583
|
-
| 422 | Invalid data | Validate field types and values |
|
|
584
|
-
| 429 | Rate limited | Implement backoff strategy |
|
|
585
|
-
|
|
586
|
-
---
|
|
587
|
-
|
|
588
|
-
## ๐งช Testing & Examples
|
|
589
|
-
|
|
590
|
-
### ๐ง Integration Test Suite
|
|
591
|
-
```bash
|
|
592
|
-
# Run comprehensive tests
|
|
593
|
-
npm test
|
|
594
|
-
|
|
595
|
-
# Test specific functionality
|
|
596
|
-
npm run test:oauth
|
|
597
|
-
npm run test:security
|
|
598
|
-
npm run test:mcp
|
|
599
|
-
```
|
|
600
|
-
|
|
601
|
-
### ๐ Example Workflows
|
|
602
|
-
|
|
603
|
-
#### 1. Basic Data Retrieval
|
|
604
|
-
```javascript
|
|
605
|
-
// Initialize MCP client
|
|
606
|
-
const client = new MCPClient('http://localhost:8010/mcp');
|
|
607
|
-
|
|
608
|
-
// Initialize connection
|
|
609
|
-
await client.initialize();
|
|
610
|
-
|
|
611
|
-
// List tables
|
|
612
|
-
const tables = await client.callTool('list_tables', {
|
|
613
|
-
include_schema: true
|
|
614
|
-
});
|
|
615
|
-
|
|
616
|
-
// Get records
|
|
617
|
-
const records = await client.callTool('list_records', {
|
|
618
|
-
table: 'Tasks',
|
|
619
|
-
maxRecords: 10,
|
|
620
|
-
filterByFormula: '{Status} = "Active"'
|
|
621
|
-
});
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
#### 2. OAuth2 Authentication
|
|
625
|
-
```javascript
|
|
626
|
-
// Start OAuth flow
|
|
627
|
-
const authUrl = await client.callTool('oauth_authorize');
|
|
628
|
-
console.log('Visit:', authUrl.authorization_url);
|
|
629
|
-
|
|
630
|
-
// Check status after user authorization
|
|
631
|
-
const status = await client.callTool('oauth_status');
|
|
632
|
-
console.log('Authenticated:', status.authenticated);
|
|
633
|
-
```
|
|
634
|
-
|
|
635
|
-
#### 3. Security Audit
|
|
636
|
-
```javascript
|
|
637
|
-
// Perform security audit
|
|
638
|
-
const audit = await client.callTool('security_audit', {
|
|
639
|
-
include_tokens: false
|
|
640
|
-
});
|
|
641
|
-
console.log('Security status:', audit);
|
|
642
|
-
```
|
|
643
|
-
|
|
644
|
-
---
|
|
645
|
-
|
|
646
|
-
## ๐ Performance & Optimization
|
|
647
|
-
|
|
648
|
-
### ๐ Performance Metrics
|
|
649
|
-
- **Response Time**: < 100ms for cached requests
|
|
650
|
-
- **Throughput**: 60 requests/minute/client
|
|
651
|
-
- **Memory Usage**: < 100MB base memory
|
|
652
|
-
- **CPU Usage**: < 5% under normal load
|
|
653
|
-
|
|
654
|
-
### โก Optimization Tips
|
|
655
|
-
1. **Caching**: Responses cached for 60 seconds
|
|
656
|
-
2. **Connection Pooling**: Reuse HTTP connections
|
|
657
|
-
3. **Batch Requests**: Use pagination for large datasets
|
|
658
|
-
4. **Field Selection**: Request only needed fields
|
|
659
|
-
5. **Filtering**: Use Airtable formulas for server-side filtering
|
|
660
|
-
|
|
661
|
-
---
|
|
662
|
-
|
|
663
|
-
## ๐ง Configuration Reference
|
|
664
|
-
|
|
665
|
-
### ๐ Environment Variables
|
|
666
|
-
|
|
667
|
-
```bash
|
|
668
|
-
# Core Configuration
|
|
669
|
-
AIRTABLE_TOKEN=pat... # Personal Access Token (required)
|
|
670
|
-
AIRTABLE_BASE_ID=app... # Base ID (required)
|
|
671
|
-
PORT=8010 # Server port (default: 8010)
|
|
672
|
-
HOST=localhost # Server host (default: localhost)
|
|
673
|
-
|
|
674
|
-
# OAuth2 Configuration
|
|
675
|
-
AIRTABLE_CLIENT_ID=oauth_client_id # OAuth2 client ID
|
|
676
|
-
AIRTABLE_CLIENT_SECRET=oauth_secret # OAuth2 client secret
|
|
677
|
-
OAUTH_REDIRECT_URI=http://... # OAuth2 redirect URI
|
|
678
|
-
|
|
679
|
-
# Security Configuration
|
|
680
|
-
ALLOWED_ORIGINS=* # CORS allowed origins
|
|
681
|
-
MAX_REQUESTS_PER_MINUTE=60 # Rate limit (default: 60)
|
|
682
|
-
SESSION_SECRET=random_secret # Session encryption key
|
|
683
|
-
|
|
684
|
-
# Logging Configuration
|
|
685
|
-
LOG_LEVEL=INFO # Log level (ERROR, WARN, INFO, DEBUG, TRACE)
|
|
686
|
-
LOG_FORMAT=json # Log format (json, text)
|
|
687
|
-
LOG_FILE=/var/log/mcp.log # Log file path
|
|
688
|
-
|
|
689
|
-
# Performance Configuration
|
|
690
|
-
CACHE_TTL=60 # Cache TTL in seconds
|
|
691
|
-
CONNECTION_TIMEOUT=30000 # Connection timeout in ms
|
|
692
|
-
REQUEST_TIMEOUT=10000 # Request timeout in ms
|
|
693
|
-
```
|
|
694
|
-
|
|
695
|
-
### ๐ Command Line Options
|
|
696
|
-
|
|
697
|
-
```bash
|
|
698
|
-
node airtable_mcp_v2_oauth.js [options]
|
|
699
|
-
|
|
700
|
-
Options:
|
|
701
|
-
--token <token> Airtable Personal Access Token
|
|
702
|
-
--base <base_id> Airtable Base ID
|
|
703
|
-
--port <port> Server port (default: 8010)
|
|
704
|
-
--host <host> Server host (default: localhost)
|
|
705
|
-
--log-level <level> Log level (default: INFO)
|
|
706
|
-
--help Show help
|
|
707
|
-
--version Show version
|
|
708
|
-
```
|
|
709
|
-
|
|
710
|
-
---
|
|
711
|
-
|
|
712
|
-
## ๐ Integration Examples
|
|
713
|
-
|
|
714
|
-
### ๐ฅ๏ธ Claude Desktop Configuration
|
|
715
|
-
|
|
716
|
-
```json
|
|
717
|
-
{
|
|
718
|
-
"mcpServers": {
|
|
719
|
-
"airtable": {
|
|
720
|
-
"command": "npx",
|
|
721
|
-
"args": ["@rashidazarang/airtable-mcp"],
|
|
722
|
-
"env": {
|
|
723
|
-
"AIRTABLE_TOKEN": "YOUR_TOKEN",
|
|
724
|
-
"AIRTABLE_BASE_ID": "YOUR_BASE_ID"
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
```
|
|
730
|
-
|
|
731
|
-
### ๐ป VS Code with Cline
|
|
732
|
-
|
|
733
|
-
```json
|
|
734
|
-
{
|
|
735
|
-
"cline.mcpServers": [
|
|
736
|
-
{
|
|
737
|
-
"name": "airtable",
|
|
738
|
-
"transport": {
|
|
739
|
-
"type": "stdio",
|
|
740
|
-
"command": "node",
|
|
741
|
-
"args": ["path/to/airtable_mcp_v2_oauth.js"]
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
]
|
|
745
|
-
}
|
|
746
|
-
```
|
|
747
|
-
|
|
748
|
-
### ๐ณ Docker Compose
|
|
749
|
-
|
|
750
|
-
```yaml
|
|
751
|
-
version: '3.8'
|
|
752
|
-
services:
|
|
753
|
-
airtable-mcp:
|
|
754
|
-
image: rashidazarang/airtable-mcp:latest
|
|
755
|
-
ports:
|
|
756
|
-
- "8010:8010"
|
|
757
|
-
environment:
|
|
758
|
-
- AIRTABLE_TOKEN=${AIRTABLE_TOKEN}
|
|
759
|
-
- AIRTABLE_BASE_ID=${AIRTABLE_BASE_ID}
|
|
760
|
-
- LOG_LEVEL=INFO
|
|
761
|
-
restart: unless-stopped
|
|
762
|
-
healthcheck:
|
|
763
|
-
test: ["CMD", "curl", "-f", "http://localhost:8010/health"]
|
|
764
|
-
interval: 30s
|
|
765
|
-
timeout: 10s
|
|
766
|
-
retries: 3
|
|
767
|
-
```
|
|
768
|
-
|
|
769
|
-
---
|
|
770
|
-
|
|
771
|
-
## ๐ ๏ธ Development & Contributing
|
|
772
|
-
|
|
773
|
-
### ๐๏ธ Development Setup
|
|
774
|
-
|
|
775
|
-
```bash
|
|
776
|
-
# Clone repository
|
|
777
|
-
git clone https://github.com/rashidazarang/airtable-mcp.git
|
|
778
|
-
cd airtable-mcp
|
|
779
|
-
|
|
780
|
-
# Install dependencies
|
|
781
|
-
npm install
|
|
782
|
-
|
|
783
|
-
# Set up environment
|
|
784
|
-
cp .env.example .env
|
|
785
|
-
# Edit .env with your credentials
|
|
786
|
-
|
|
787
|
-
# Start development server
|
|
788
|
-
npm run dev
|
|
789
|
-
|
|
790
|
-
# Run tests
|
|
791
|
-
npm test
|
|
792
|
-
|
|
793
|
-
# Build for production
|
|
794
|
-
npm run build
|
|
795
|
-
```
|
|
796
|
-
|
|
797
|
-
### ๐งช Testing
|
|
798
|
-
|
|
799
|
-
```bash
|
|
800
|
-
# Unit tests
|
|
801
|
-
npm run test:unit
|
|
802
|
-
|
|
803
|
-
# Integration tests
|
|
804
|
-
npm run test:integration
|
|
805
|
-
|
|
806
|
-
# Security tests
|
|
807
|
-
npm run test:security
|
|
808
|
-
|
|
809
|
-
# Performance tests
|
|
810
|
-
npm run test:performance
|
|
811
|
-
|
|
812
|
-
# Coverage report
|
|
813
|
-
npm run coverage
|
|
814
|
-
```
|
|
815
|
-
|
|
816
|
-
### ๐ API Documentation Updates
|
|
817
|
-
|
|
818
|
-
To update this documentation:
|
|
819
|
-
|
|
820
|
-
1. Edit the source in `API_DOCUMENTATION.md`
|
|
821
|
-
2. Run documentation generation: `npm run docs:generate`
|
|
822
|
-
3. Test examples: `npm run docs:test`
|
|
823
|
-
4. Submit a pull request with the updates
|
|
824
|
-
|
|
825
|
-
---
|
|
826
|
-
|
|
827
|
-
## ๐ Troubleshooting
|
|
828
|
-
|
|
829
|
-
### Common Issues
|
|
830
|
-
|
|
831
|
-
#### ๐ Authentication Errors
|
|
832
|
-
```bash
|
|
833
|
-
# Problem: "Invalid token" error
|
|
834
|
-
# Solution: Verify token and scopes
|
|
835
|
-
curl -H "Authorization: Bearer $AIRTABLE_TOKEN" \
|
|
836
|
-
https://api.airtable.com/v0/meta/whoami
|
|
837
|
-
```
|
|
838
|
-
|
|
839
|
-
#### ๐ Connection Issues
|
|
840
|
-
```bash
|
|
841
|
-
# Problem: "Connection refused"
|
|
842
|
-
# Solution: Check if server is running
|
|
843
|
-
curl http://localhost:8010/health
|
|
844
|
-
```
|
|
845
|
-
|
|
846
|
-
#### ๐ Rate Limiting
|
|
847
|
-
```bash
|
|
848
|
-
# Problem: "Rate limit exceeded"
|
|
849
|
-
# Solution: Implement exponential backoff
|
|
850
|
-
for i in {1..5}; do
|
|
851
|
-
sleep $((2**i))
|
|
852
|
-
curl http://localhost:8010/mcp
|
|
853
|
-
done
|
|
854
|
-
```
|
|
855
|
-
|
|
856
|
-
### ๐ Debug Mode
|
|
857
|
-
|
|
858
|
-
```bash
|
|
859
|
-
# Enable debug logging
|
|
860
|
-
export LOG_LEVEL=DEBUG
|
|
861
|
-
node airtable_mcp_v2_oauth.js
|
|
862
|
-
|
|
863
|
-
# Trace mode for detailed logging
|
|
864
|
-
export LOG_LEVEL=TRACE
|
|
865
|
-
node airtable_mcp_v2_oauth.js
|
|
866
|
-
```
|
|
867
|
-
|
|
868
|
-
---
|
|
869
|
-
|
|
870
|
-
## ๐ Support & Community
|
|
871
|
-
|
|
872
|
-
### ๐ Getting Help
|
|
873
|
-
- **๐ Documentation**: [GitHub Wiki](https://github.com/rashidazarang/airtable-mcp/wiki)
|
|
874
|
-
- **๐ฌ Discussions**: [GitHub Discussions](https://github.com/rashidazarang/airtable-mcp/discussions)
|
|
875
|
-
- **๐ Issues**: [GitHub Issues](https://github.com/rashidazarang/airtable-mcp/issues)
|
|
876
|
-
- **๐ Security**: security@[domain]
|
|
877
|
-
|
|
878
|
-
### ๐ค Contributing
|
|
879
|
-
1. Read our [Contributing Guide](./CONTRIBUTING.md)
|
|
880
|
-
2. Follow our [Code of Conduct](./CODE_OF_CONDUCT.md)
|
|
881
|
-
3. Check our [Development Guide](./DEVELOPMENT.md)
|
|
882
|
-
4. Submit pull requests with comprehensive tests
|
|
883
|
-
|
|
884
|
-
### ๐ Trust Score Progress
|
|
885
|
-
This documentation contributes to our **100/100 Trust Score** goal by providing:
|
|
886
|
-
- โ
**Comprehensive Coverage**: All APIs documented
|
|
887
|
-
- โ
**Interactive Examples**: Working code samples
|
|
888
|
-
- โ
**Security Guidelines**: Best practices included
|
|
889
|
-
- โ
**Error Handling**: Complete error reference
|
|
890
|
-
- โ
**Integration Guides**: Multiple client examples
|
|
891
|
-
|
|
892
|
-
---
|
|
893
|
-
|
|
894
|
-
**๐
Last Updated**: August 2025
|
|
895
|
-
**๐ Version**: 2.1.0
|
|
896
|
-
**๐ฏ Trust Score Target**: 100/100
|
|
897
|
-
**๐ง Contact**: api-docs@[domain]
|