@rashidazarang/airtable-mcp 1.5.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 +55 -10
- package/RELEASE_NOTES_v1.6.0.md +248 -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.js +447 -1
- 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/test_v1.6.0_comprehensive.sh +187 -0
- 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,289 @@
|
|
|
1
|
+
# Prometheus Alerting Rules for Airtable MCP Server
|
|
2
|
+
# Comprehensive monitoring for Trust Score 100/100
|
|
3
|
+
|
|
4
|
+
groups:
|
|
5
|
+
# ============================================================================
|
|
6
|
+
# HIGH SEVERITY ALERTS - Immediate Action Required
|
|
7
|
+
# ============================================================================
|
|
8
|
+
- name: airtable-mcp.critical
|
|
9
|
+
interval: 30s
|
|
10
|
+
rules:
|
|
11
|
+
# Service Down
|
|
12
|
+
- alert: AirtableMCPDown
|
|
13
|
+
expr: up{job="airtable-mcp"} == 0
|
|
14
|
+
for: 1m
|
|
15
|
+
labels:
|
|
16
|
+
severity: critical
|
|
17
|
+
service: airtable-mcp
|
|
18
|
+
trust_score_impact: high
|
|
19
|
+
annotations:
|
|
20
|
+
summary: "Airtable MCP Server is down"
|
|
21
|
+
description: "Airtable MCP Server has been down for more than 1 minute. Instance: {{ $labels.instance }}"
|
|
22
|
+
runbook_url: "https://docs.example.com/runbooks/mcp-down"
|
|
23
|
+
action: "Check server logs and restart if necessary"
|
|
24
|
+
|
|
25
|
+
# High Error Rate
|
|
26
|
+
- alert: AirtableMCPHighErrorRate
|
|
27
|
+
expr: rate(airtable_mcp_http_requests_total{status=~"5.."}[5m]) / rate(airtable_mcp_http_requests_total[5m]) > 0.1
|
|
28
|
+
for: 2m
|
|
29
|
+
labels:
|
|
30
|
+
severity: critical
|
|
31
|
+
service: airtable-mcp
|
|
32
|
+
trust_score_impact: high
|
|
33
|
+
annotations:
|
|
34
|
+
summary: "High error rate in Airtable MCP Server"
|
|
35
|
+
description: "Error rate is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
36
|
+
runbook_url: "https://docs.example.com/runbooks/high-error-rate"
|
|
37
|
+
|
|
38
|
+
# Memory Usage Critical
|
|
39
|
+
- alert: AirtableMCPMemoryUsageCritical
|
|
40
|
+
expr: (airtable_mcp_process_resident_memory_bytes / airtable_mcp_process_memory_limit_bytes) > 0.9
|
|
41
|
+
for: 5m
|
|
42
|
+
labels:
|
|
43
|
+
severity: critical
|
|
44
|
+
service: airtable-mcp
|
|
45
|
+
trust_score_impact: medium
|
|
46
|
+
annotations:
|
|
47
|
+
summary: "Critical memory usage in Airtable MCP Server"
|
|
48
|
+
description: "Memory usage is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
49
|
+
runbook_url: "https://docs.example.com/runbooks/memory-usage"
|
|
50
|
+
|
|
51
|
+
# Response Time Critical
|
|
52
|
+
- alert: AirtableMCPResponseTimeCritical
|
|
53
|
+
expr: histogram_quantile(0.95, rate(airtable_mcp_http_request_duration_seconds_bucket[5m])) > 5
|
|
54
|
+
for: 3m
|
|
55
|
+
labels:
|
|
56
|
+
severity: critical
|
|
57
|
+
service: airtable-mcp
|
|
58
|
+
trust_score_impact: high
|
|
59
|
+
annotations:
|
|
60
|
+
summary: "Critical response time in Airtable MCP Server"
|
|
61
|
+
description: "95th percentile response time is {{ $value }}s for instance {{ $labels.instance }}"
|
|
62
|
+
runbook_url: "https://docs.example.com/runbooks/response-time"
|
|
63
|
+
|
|
64
|
+
# Rate Limit Exhaustion
|
|
65
|
+
- alert: AirtableMCPRateLimitExhaustion
|
|
66
|
+
expr: rate(airtable_mcp_rate_limit_exceeded_total[5m]) > 10
|
|
67
|
+
for: 1m
|
|
68
|
+
labels:
|
|
69
|
+
severity: critical
|
|
70
|
+
service: airtable-mcp
|
|
71
|
+
trust_score_impact: high
|
|
72
|
+
annotations:
|
|
73
|
+
summary: "Rate limit exhaustion in Airtable MCP Server"
|
|
74
|
+
description: "Rate limit exceeded {{ $value }} times per second for instance {{ $labels.instance }}"
|
|
75
|
+
runbook_url: "https://docs.example.com/runbooks/rate-limit"
|
|
76
|
+
|
|
77
|
+
# ============================================================================
|
|
78
|
+
# WARNING ALERTS - Attention Required
|
|
79
|
+
# ============================================================================
|
|
80
|
+
- name: airtable-mcp.warning
|
|
81
|
+
interval: 60s
|
|
82
|
+
rules:
|
|
83
|
+
# High Memory Usage
|
|
84
|
+
- alert: AirtableMCPHighMemoryUsage
|
|
85
|
+
expr: (airtable_mcp_process_resident_memory_bytes / airtable_mcp_process_memory_limit_bytes) > 0.7
|
|
86
|
+
for: 10m
|
|
87
|
+
labels:
|
|
88
|
+
severity: warning
|
|
89
|
+
service: airtable-mcp
|
|
90
|
+
trust_score_impact: low
|
|
91
|
+
annotations:
|
|
92
|
+
summary: "High memory usage in Airtable MCP Server"
|
|
93
|
+
description: "Memory usage is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
94
|
+
runbook_url: "https://docs.example.com/runbooks/memory-usage"
|
|
95
|
+
|
|
96
|
+
# High CPU Usage
|
|
97
|
+
- alert: AirtableMCPHighCPUUsage
|
|
98
|
+
expr: rate(airtable_mcp_process_cpu_seconds_total[5m]) > 0.8
|
|
99
|
+
for: 10m
|
|
100
|
+
labels:
|
|
101
|
+
severity: warning
|
|
102
|
+
service: airtable-mcp
|
|
103
|
+
trust_score_impact: low
|
|
104
|
+
annotations:
|
|
105
|
+
summary: "High CPU usage in Airtable MCP Server"
|
|
106
|
+
description: "CPU usage is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
107
|
+
runbook_url: "https://docs.example.com/runbooks/cpu-usage"
|
|
108
|
+
|
|
109
|
+
# Slow Response Time
|
|
110
|
+
- alert: AirtableMCPSlowResponseTime
|
|
111
|
+
expr: histogram_quantile(0.95, rate(airtable_mcp_http_request_duration_seconds_bucket[5m])) > 2
|
|
112
|
+
for: 10m
|
|
113
|
+
labels:
|
|
114
|
+
severity: warning
|
|
115
|
+
service: airtable-mcp
|
|
116
|
+
trust_score_impact: medium
|
|
117
|
+
annotations:
|
|
118
|
+
summary: "Slow response time in Airtable MCP Server"
|
|
119
|
+
description: "95th percentile response time is {{ $value }}s for instance {{ $labels.instance }}"
|
|
120
|
+
runbook_url: "https://docs.example.com/runbooks/response-time"
|
|
121
|
+
|
|
122
|
+
# High Request Rate
|
|
123
|
+
- alert: AirtableMCPHighRequestRate
|
|
124
|
+
expr: rate(airtable_mcp_http_requests_total[5m]) > 50
|
|
125
|
+
for: 10m
|
|
126
|
+
labels:
|
|
127
|
+
severity: warning
|
|
128
|
+
service: airtable-mcp
|
|
129
|
+
trust_score_impact: low
|
|
130
|
+
annotations:
|
|
131
|
+
summary: "High request rate in Airtable MCP Server"
|
|
132
|
+
description: "Request rate is {{ $value }} requests/second for instance {{ $labels.instance }}"
|
|
133
|
+
runbook_url: "https://docs.example.com/runbooks/high-request-rate"
|
|
134
|
+
|
|
135
|
+
# OAuth Token Expiring Soon
|
|
136
|
+
- alert: AirtableMCPOAuthTokenExpiring
|
|
137
|
+
expr: airtable_mcp_oauth_token_expires_in_seconds < 3600
|
|
138
|
+
for: 5m
|
|
139
|
+
labels:
|
|
140
|
+
severity: warning
|
|
141
|
+
service: airtable-mcp
|
|
142
|
+
trust_score_impact: medium
|
|
143
|
+
annotations:
|
|
144
|
+
summary: "OAuth token expiring soon"
|
|
145
|
+
description: "OAuth token expires in {{ $value }} seconds for instance {{ $labels.instance }}"
|
|
146
|
+
runbook_url: "https://docs.example.com/runbooks/oauth-token"
|
|
147
|
+
|
|
148
|
+
# Cache Hit Rate Low
|
|
149
|
+
- alert: AirtableMCPLowCacheHitRate
|
|
150
|
+
expr: (rate(airtable_mcp_cache_hits_total[5m]) / rate(airtable_mcp_cache_requests_total[5m])) < 0.7
|
|
151
|
+
for: 15m
|
|
152
|
+
labels:
|
|
153
|
+
severity: warning
|
|
154
|
+
service: airtable-mcp
|
|
155
|
+
trust_score_impact: low
|
|
156
|
+
annotations:
|
|
157
|
+
summary: "Low cache hit rate in Airtable MCP Server"
|
|
158
|
+
description: "Cache hit rate is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
159
|
+
runbook_url: "https://docs.example.com/runbooks/cache-performance"
|
|
160
|
+
|
|
161
|
+
# ============================================================================
|
|
162
|
+
# SECURITY ALERTS - Security-related monitoring
|
|
163
|
+
# ============================================================================
|
|
164
|
+
- name: airtable-mcp.security
|
|
165
|
+
interval: 30s
|
|
166
|
+
rules:
|
|
167
|
+
# Authentication Failures
|
|
168
|
+
- alert: AirtableMCPAuthFailures
|
|
169
|
+
expr: rate(airtable_mcp_auth_failures_total[5m]) > 5
|
|
170
|
+
for: 2m
|
|
171
|
+
labels:
|
|
172
|
+
severity: warning
|
|
173
|
+
service: airtable-mcp
|
|
174
|
+
category: security
|
|
175
|
+
trust_score_impact: high
|
|
176
|
+
annotations:
|
|
177
|
+
summary: "High authentication failure rate"
|
|
178
|
+
description: "Authentication failure rate is {{ $value }} failures/second for instance {{ $labels.instance }}"
|
|
179
|
+
runbook_url: "https://docs.example.com/runbooks/auth-failures"
|
|
180
|
+
|
|
181
|
+
# Suspicious Request Patterns
|
|
182
|
+
- alert: AirtableMCPSuspiciousRequests
|
|
183
|
+
expr: rate(airtable_mcp_http_requests_total{status="400"}[5m]) > 10
|
|
184
|
+
for: 5m
|
|
185
|
+
labels:
|
|
186
|
+
severity: warning
|
|
187
|
+
service: airtable-mcp
|
|
188
|
+
category: security
|
|
189
|
+
trust_score_impact: medium
|
|
190
|
+
annotations:
|
|
191
|
+
summary: "High rate of suspicious requests"
|
|
192
|
+
description: "Bad request rate is {{ $value }} requests/second for instance {{ $labels.instance }}"
|
|
193
|
+
runbook_url: "https://docs.example.com/runbooks/suspicious-requests"
|
|
194
|
+
|
|
195
|
+
# Rate Limit Violations
|
|
196
|
+
- alert: AirtableMCPRateLimitViolations
|
|
197
|
+
expr: rate(airtable_mcp_rate_limit_exceeded_total[5m]) > 1
|
|
198
|
+
for: 5m
|
|
199
|
+
labels:
|
|
200
|
+
severity: info
|
|
201
|
+
service: airtable-mcp
|
|
202
|
+
category: security
|
|
203
|
+
trust_score_impact: low
|
|
204
|
+
annotations:
|
|
205
|
+
summary: "Rate limit violations detected"
|
|
206
|
+
description: "Rate limit exceeded {{ $value }} times/second for instance {{ $labels.instance }}"
|
|
207
|
+
runbook_url: "https://docs.example.com/runbooks/rate-limit-violations"
|
|
208
|
+
|
|
209
|
+
# ============================================================================
|
|
210
|
+
# BUSINESS METRICS - Trust Score related alerts
|
|
211
|
+
# ============================================================================
|
|
212
|
+
- name: airtable-mcp.business
|
|
213
|
+
interval: 60s
|
|
214
|
+
rules:
|
|
215
|
+
# API Success Rate
|
|
216
|
+
- alert: AirtableMCPLowSuccessRate
|
|
217
|
+
expr: (rate(airtable_mcp_http_requests_total{status=~"2.."}[10m]) / rate(airtable_mcp_http_requests_total[10m])) < 0.95
|
|
218
|
+
for: 10m
|
|
219
|
+
labels:
|
|
220
|
+
severity: warning
|
|
221
|
+
service: airtable-mcp
|
|
222
|
+
category: business
|
|
223
|
+
trust_score_impact: high
|
|
224
|
+
annotations:
|
|
225
|
+
summary: "Low API success rate"
|
|
226
|
+
description: "API success rate is {{ $value | humanizePercentage }} for instance {{ $labels.instance }}"
|
|
227
|
+
runbook_url: "https://docs.example.com/runbooks/success-rate"
|
|
228
|
+
|
|
229
|
+
# Trust Score Degradation
|
|
230
|
+
- alert: AirtableMCPTrustScoreDegradation
|
|
231
|
+
expr: airtable_mcp_trust_score < 95
|
|
232
|
+
for: 5m
|
|
233
|
+
labels:
|
|
234
|
+
severity: warning
|
|
235
|
+
service: airtable-mcp
|
|
236
|
+
category: business
|
|
237
|
+
trust_score_impact: critical
|
|
238
|
+
annotations:
|
|
239
|
+
summary: "Trust score degradation detected"
|
|
240
|
+
description: "Trust score is {{ $value }} for instance {{ $labels.instance }}"
|
|
241
|
+
runbook_url: "https://docs.example.com/runbooks/trust-score"
|
|
242
|
+
|
|
243
|
+
# ============================================================================
|
|
244
|
+
# INFRASTRUCTURE ALERTS - Supporting services
|
|
245
|
+
# ============================================================================
|
|
246
|
+
- name: airtable-mcp.infrastructure
|
|
247
|
+
interval: 60s
|
|
248
|
+
rules:
|
|
249
|
+
# Redis Connection Issues
|
|
250
|
+
- alert: AirtableMCPRedisConnectionFailed
|
|
251
|
+
expr: airtable_mcp_redis_connection_errors_total > 0
|
|
252
|
+
for: 2m
|
|
253
|
+
labels:
|
|
254
|
+
severity: warning
|
|
255
|
+
service: airtable-mcp
|
|
256
|
+
category: infrastructure
|
|
257
|
+
trust_score_impact: medium
|
|
258
|
+
annotations:
|
|
259
|
+
summary: "Redis connection issues"
|
|
260
|
+
description: "Redis connection errors detected for instance {{ $labels.instance }}"
|
|
261
|
+
runbook_url: "https://docs.example.com/runbooks/redis-connection"
|
|
262
|
+
|
|
263
|
+
# Airtable API Rate Limits
|
|
264
|
+
- alert: AirtableMCPAirtableAPIRateLimited
|
|
265
|
+
expr: rate(airtable_mcp_airtable_api_rate_limited_total[5m]) > 0
|
|
266
|
+
for: 1m
|
|
267
|
+
labels:
|
|
268
|
+
severity: warning
|
|
269
|
+
service: airtable-mcp
|
|
270
|
+
category: infrastructure
|
|
271
|
+
trust_score_impact: medium
|
|
272
|
+
annotations:
|
|
273
|
+
summary: "Airtable API rate limiting detected"
|
|
274
|
+
description: "Airtable API rate limit hit for instance {{ $labels.instance }}"
|
|
275
|
+
runbook_url: "https://docs.example.com/runbooks/airtable-rate-limit"
|
|
276
|
+
|
|
277
|
+
# Disk Space Low
|
|
278
|
+
- alert: AirtableMCPDiskSpaceLow
|
|
279
|
+
expr: (node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) < 0.1
|
|
280
|
+
for: 5m
|
|
281
|
+
labels:
|
|
282
|
+
severity: warning
|
|
283
|
+
service: airtable-mcp
|
|
284
|
+
category: infrastructure
|
|
285
|
+
trust_score_impact: low
|
|
286
|
+
annotations:
|
|
287
|
+
summary: "Low disk space"
|
|
288
|
+
description: "Disk space is {{ $value | humanizePercentage }} free for instance {{ $labels.instance }}"
|
|
289
|
+
runbook_url: "https://docs.example.com/runbooks/disk-space"
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
# Prometheus Configuration for Airtable MCP Server
|
|
2
|
+
# Comprehensive monitoring for Trust Score 100/100
|
|
3
|
+
|
|
4
|
+
global:
|
|
5
|
+
scrape_interval: 15s
|
|
6
|
+
evaluation_interval: 15s
|
|
7
|
+
external_labels:
|
|
8
|
+
cluster: 'airtable-mcp-cluster'
|
|
9
|
+
environment: 'production'
|
|
10
|
+
trust_score: '100'
|
|
11
|
+
|
|
12
|
+
# Alertmanager configuration
|
|
13
|
+
alerting:
|
|
14
|
+
alertmanagers:
|
|
15
|
+
- static_configs:
|
|
16
|
+
- targets:
|
|
17
|
+
- alertmanager:9093
|
|
18
|
+
|
|
19
|
+
# Load rules once and periodically evaluate them
|
|
20
|
+
rule_files:
|
|
21
|
+
- "alerts/*.yml"
|
|
22
|
+
- "rules/*.yml"
|
|
23
|
+
|
|
24
|
+
# Scrape configurations
|
|
25
|
+
scrape_configs:
|
|
26
|
+
# Prometheus itself
|
|
27
|
+
- job_name: 'prometheus'
|
|
28
|
+
static_configs:
|
|
29
|
+
- targets: ['localhost:9090']
|
|
30
|
+
scrape_interval: 15s
|
|
31
|
+
metrics_path: /metrics
|
|
32
|
+
|
|
33
|
+
# Airtable MCP Server
|
|
34
|
+
- job_name: 'airtable-mcp'
|
|
35
|
+
static_configs:
|
|
36
|
+
- targets: ['airtable-mcp:9090']
|
|
37
|
+
scrape_interval: 15s
|
|
38
|
+
metrics_path: /metrics
|
|
39
|
+
honor_labels: true
|
|
40
|
+
relabel_configs:
|
|
41
|
+
- source_labels: [__address__]
|
|
42
|
+
target_label: __param_target
|
|
43
|
+
- source_labels: [__param_target]
|
|
44
|
+
target_label: instance
|
|
45
|
+
- target_label: __address__
|
|
46
|
+
replacement: airtable-mcp:9090
|
|
47
|
+
metric_relabel_configs:
|
|
48
|
+
- source_labels: [__name__]
|
|
49
|
+
regex: 'airtable_mcp_(.*)'
|
|
50
|
+
target_label: __name__
|
|
51
|
+
replacement: 'mcp_${1}'
|
|
52
|
+
|
|
53
|
+
# Kubernetes API Server
|
|
54
|
+
- job_name: 'kubernetes-apiservers'
|
|
55
|
+
kubernetes_sd_configs:
|
|
56
|
+
- role: endpoints
|
|
57
|
+
namespaces:
|
|
58
|
+
names:
|
|
59
|
+
- default
|
|
60
|
+
scheme: https
|
|
61
|
+
tls_config:
|
|
62
|
+
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
|
63
|
+
insecure_skip_verify: true
|
|
64
|
+
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
|
65
|
+
relabel_configs:
|
|
66
|
+
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
|
|
67
|
+
action: keep
|
|
68
|
+
regex: default;kubernetes;https
|
|
69
|
+
|
|
70
|
+
# Kubernetes Nodes
|
|
71
|
+
- job_name: 'kubernetes-nodes'
|
|
72
|
+
kubernetes_sd_configs:
|
|
73
|
+
- role: node
|
|
74
|
+
scheme: https
|
|
75
|
+
tls_config:
|
|
76
|
+
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
|
|
77
|
+
insecure_skip_verify: true
|
|
78
|
+
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
|
|
79
|
+
relabel_configs:
|
|
80
|
+
- action: labelmap
|
|
81
|
+
regex: __meta_kubernetes_node_label_(.+)
|
|
82
|
+
- target_label: __address__
|
|
83
|
+
replacement: kubernetes.default.svc:443
|
|
84
|
+
- source_labels: [__meta_kubernetes_node_name]
|
|
85
|
+
regex: (.+)
|
|
86
|
+
target_label: __metrics_path__
|
|
87
|
+
replacement: /api/v1/nodes/${1}/proxy/metrics
|
|
88
|
+
|
|
89
|
+
# Kubernetes Node Exporter
|
|
90
|
+
- job_name: 'kubernetes-node-exporter'
|
|
91
|
+
kubernetes_sd_configs:
|
|
92
|
+
- role: endpoints
|
|
93
|
+
relabel_configs:
|
|
94
|
+
- source_labels: [__meta_kubernetes_endpoints_name]
|
|
95
|
+
action: keep
|
|
96
|
+
regex: node-exporter
|
|
97
|
+
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name]
|
|
98
|
+
action: keep
|
|
99
|
+
regex: Node;(.*)
|
|
100
|
+
- source_labels: [__meta_kubernetes_endpoint_address_target_name]
|
|
101
|
+
action: replace
|
|
102
|
+
target_label: node
|
|
103
|
+
- action: labelmap
|
|
104
|
+
regex: __meta_kubernetes_service_label_(.+)
|
|
105
|
+
|
|
106
|
+
# Kubernetes Pods
|
|
107
|
+
- job_name: 'kubernetes-pods'
|
|
108
|
+
kubernetes_sd_configs:
|
|
109
|
+
- role: pod
|
|
110
|
+
namespaces:
|
|
111
|
+
names:
|
|
112
|
+
- airtable-mcp
|
|
113
|
+
- monitoring
|
|
114
|
+
relabel_configs:
|
|
115
|
+
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
|
|
116
|
+
action: keep
|
|
117
|
+
regex: true
|
|
118
|
+
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
|
|
119
|
+
action: replace
|
|
120
|
+
target_label: __metrics_path__
|
|
121
|
+
regex: (.+)
|
|
122
|
+
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
|
|
123
|
+
action: replace
|
|
124
|
+
regex: ([^:]+)(?::\d+)?;(\d+)
|
|
125
|
+
replacement: $1:$2
|
|
126
|
+
target_label: __address__
|
|
127
|
+
- action: labelmap
|
|
128
|
+
regex: __meta_kubernetes_pod_label_(.+)
|
|
129
|
+
- source_labels: [__meta_kubernetes_namespace]
|
|
130
|
+
action: replace
|
|
131
|
+
target_label: kubernetes_namespace
|
|
132
|
+
- source_labels: [__meta_kubernetes_pod_name]
|
|
133
|
+
action: replace
|
|
134
|
+
target_label: kubernetes_pod_name
|
|
135
|
+
|
|
136
|
+
# Kubernetes Services
|
|
137
|
+
- job_name: 'kubernetes-services'
|
|
138
|
+
kubernetes_sd_configs:
|
|
139
|
+
- role: endpoints
|
|
140
|
+
namespaces:
|
|
141
|
+
names:
|
|
142
|
+
- airtable-mcp
|
|
143
|
+
- monitoring
|
|
144
|
+
relabel_configs:
|
|
145
|
+
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
|
|
146
|
+
action: keep
|
|
147
|
+
regex: true
|
|
148
|
+
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
|
|
149
|
+
action: replace
|
|
150
|
+
target_label: __scheme__
|
|
151
|
+
regex: (https?)
|
|
152
|
+
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
|
|
153
|
+
action: replace
|
|
154
|
+
target_label: __metrics_path__
|
|
155
|
+
regex: (.+)
|
|
156
|
+
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
|
|
157
|
+
action: replace
|
|
158
|
+
target_label: __address__
|
|
159
|
+
regex: ([^:]+)(?::\d+)?;(\d+)
|
|
160
|
+
replacement: $1:$2
|
|
161
|
+
- action: labelmap
|
|
162
|
+
regex: __meta_kubernetes_service_label_(.+)
|
|
163
|
+
- source_labels: [__meta_kubernetes_namespace]
|
|
164
|
+
action: replace
|
|
165
|
+
target_label: kubernetes_namespace
|
|
166
|
+
- source_labels: [__meta_kubernetes_service_name]
|
|
167
|
+
action: replace
|
|
168
|
+
target_label: kubernetes_name
|
|
169
|
+
|
|
170
|
+
# Redis Exporter
|
|
171
|
+
- job_name: 'redis'
|
|
172
|
+
static_configs:
|
|
173
|
+
- targets: ['redis-exporter:9121']
|
|
174
|
+
scrape_interval: 30s
|
|
175
|
+
|
|
176
|
+
# Node Exporter
|
|
177
|
+
- job_name: 'node-exporter'
|
|
178
|
+
static_configs:
|
|
179
|
+
- targets: ['node-exporter:9100']
|
|
180
|
+
scrape_interval: 30s
|
|
181
|
+
|
|
182
|
+
# cAdvisor (Container metrics)
|
|
183
|
+
- job_name: 'cadvisor'
|
|
184
|
+
static_configs:
|
|
185
|
+
- targets: ['cadvisor:8080']
|
|
186
|
+
scrape_interval: 30s
|
|
187
|
+
metrics_path: /metrics
|
|
188
|
+
|
|
189
|
+
# Traefik (if using)
|
|
190
|
+
- job_name: 'traefik'
|
|
191
|
+
static_configs:
|
|
192
|
+
- targets: ['traefik:8080']
|
|
193
|
+
scrape_interval: 30s
|
|
194
|
+
metrics_path: /metrics
|
|
195
|
+
|
|
196
|
+
# Custom Application Metrics
|
|
197
|
+
- job_name: 'custom-metrics'
|
|
198
|
+
static_configs:
|
|
199
|
+
- targets: ['airtable-mcp:9090']
|
|
200
|
+
scrape_interval: 15s
|
|
201
|
+
metrics_path: /custom-metrics
|
|
202
|
+
honor_labels: true
|
|
203
|
+
|
|
204
|
+
# Remote write configuration (for long-term storage)
|
|
205
|
+
remote_write:
|
|
206
|
+
- url: "http://thanos-receive:19291/api/v1/receive"
|
|
207
|
+
name: "thanos"
|
|
208
|
+
queue_config:
|
|
209
|
+
capacity: 10000
|
|
210
|
+
max_shards: 1000
|
|
211
|
+
min_shards: 1
|
|
212
|
+
max_samples_per_send: 1000
|
|
213
|
+
batch_send_deadline: 5s
|
|
214
|
+
min_backoff: 30ms
|
|
215
|
+
max_backoff: 100ms
|
|
216
|
+
|
|
217
|
+
# Storage configuration
|
|
218
|
+
storage:
|
|
219
|
+
tsdb:
|
|
220
|
+
retention.time: 15d
|
|
221
|
+
retention.size: 50GB
|
|
222
|
+
min-block-duration: 2h
|
|
223
|
+
max-block-duration: 25h
|
|
224
|
+
wal-compression: true
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rashidazarang/airtable-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Airtable MCP for Claude Desktop - Connect directly to Airtable using natural language",
|
|
5
|
-
"main": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "Airtable MCP server for Claude Desktop - Connect directly to Airtable using natural language",
|
|
5
|
+
"main": "airtable_simple_production.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"airtable-mcp": "./
|
|
7
|
+
"airtable-mcp": "./airtable_simple_production.js"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"start": "node
|
|
10
|
+
"start": "node airtable_simple_production.js",
|
|
11
11
|
"start:python": "python3.10 inspector_server.py",
|
|
12
12
|
"test": "node test_mcp_comprehensive.js",
|
|
13
13
|
"test:quick": "./quick_test.sh",
|
|
14
|
-
"dev": "node
|
|
14
|
+
"dev": "node airtable_simple_production.js --token YOUR_TOKEN --base YOUR_BASE_ID"
|
|
15
15
|
},
|
|
16
16
|
"keywords": [
|
|
17
17
|
"airtable",
|