@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.
Files changed (116) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-report.yml +173 -0
  2. package/.github/ISSUE_TEMPLATE/feature-request.yml +209 -0
  3. package/.github/ISSUE_TEMPLATE/security-report.yml +216 -0
  4. package/.github/pull_request_template.md +245 -0
  5. package/.github/workflows/ci-cd.yml +408 -0
  6. package/.github/workflows/security-audit.yml +316 -0
  7. package/API_DOCUMENTATION.md +897 -0
  8. package/CODE_OF_CONDUCT.md +181 -0
  9. package/Dockerfile.production +127 -0
  10. package/README.md +1 -0
  11. package/airtable-clipper/CHANGELOG.md +198 -0
  12. package/airtable-clipper/CHROME_STORE_SUBMISSION.md +343 -0
  13. package/airtable-clipper/LAUNCH_STRATEGY.md +495 -0
  14. package/airtable-clipper/LICENSE +21 -0
  15. package/airtable-clipper/OAUTH_SETUP.md +51 -0
  16. package/airtable-clipper/PRIVACY_POLICY.md +187 -0
  17. package/airtable-clipper/README.md +575 -0
  18. package/airtable-clipper/SUBMIT_TO_CHROME_STORE.md +273 -0
  19. package/airtable-clipper/build.sh +85 -0
  20. package/airtable-clipper/docs/QUICK_START.md +99 -0
  21. package/airtable-clipper/docs/SETUP.md +291 -0
  22. package/airtable-clipper/extension/background.js +337 -0
  23. package/airtable-clipper/extension/base-setup.html +324 -0
  24. package/airtable-clipper/extension/base-setup.js +471 -0
  25. package/airtable-clipper/extension/content.js +771 -0
  26. package/airtable-clipper/extension/icons/README.md +69 -0
  27. package/airtable-clipper/extension/icons/icon-16.png +3 -0
  28. package/airtable-clipper/extension/manifest.json +73 -0
  29. package/airtable-clipper/extension/popup.html +144 -0
  30. package/airtable-clipper/extension/popup.js +475 -0
  31. package/airtable-clipper/extension/styles/content.css +229 -0
  32. package/airtable-clipper/extension/styles/popup.css +477 -0
  33. package/airtable-clipper/privacy-policy.md +63 -0
  34. package/airtable-clipper/releases/v1.0.0/background.js +337 -0
  35. package/airtable-clipper/releases/v1.0.0/base-setup.html +324 -0
  36. package/airtable-clipper/releases/v1.0.0/base-setup.js +471 -0
  37. package/airtable-clipper/releases/v1.0.0/content.js +771 -0
  38. package/airtable-clipper/releases/v1.0.0/icons/README.md +69 -0
  39. package/airtable-clipper/releases/v1.0.0/icons/icon-128.png +2 -0
  40. package/airtable-clipper/releases/v1.0.0/icons/icon-16.png +3 -0
  41. package/airtable-clipper/releases/v1.0.0/icons/icon-32.png +2 -0
  42. package/airtable-clipper/releases/v1.0.0/icons/icon-48.png +2 -0
  43. package/airtable-clipper/releases/v1.0.0/manifest.json +73 -0
  44. package/airtable-clipper/releases/v1.0.0/popup.html +144 -0
  45. package/airtable-clipper/releases/v1.0.0/popup.js +475 -0
  46. package/airtable-clipper/releases/v1.0.0/sidepanel.html +25 -0
  47. package/airtable-clipper/releases/v1.0.0/styles/content.css +229 -0
  48. package/airtable-clipper/releases/v1.0.0/styles/popup.css +477 -0
  49. package/airtable-clipper/releases/v1.0.1/background.js +337 -0
  50. package/airtable-clipper/releases/v1.0.1/base-setup.html +324 -0
  51. package/airtable-clipper/releases/v1.0.1/base-setup.js +471 -0
  52. package/airtable-clipper/releases/v1.0.1/content.js +771 -0
  53. package/airtable-clipper/releases/v1.0.1/icons/README.md +69 -0
  54. package/airtable-clipper/releases/v1.0.1/icons/icon-128.png +2 -0
  55. package/airtable-clipper/releases/v1.0.1/icons/icon-16.png +3 -0
  56. package/airtable-clipper/releases/v1.0.1/icons/icon-32.png +2 -0
  57. package/airtable-clipper/releases/v1.0.1/icons/icon-48.png +2 -0
  58. package/airtable-clipper/releases/v1.0.1/manifest.json +70 -0
  59. package/airtable-clipper/releases/v1.0.1/popup.html +157 -0
  60. package/airtable-clipper/releases/v1.0.1/popup.js +562 -0
  61. package/airtable-clipper/releases/v1.0.1/sidepanel.html +25 -0
  62. package/airtable-clipper/releases/v1.0.1/styles/content.css +229 -0
  63. package/airtable-clipper/releases/v1.0.1/styles/popup.css +647 -0
  64. package/airtable-clipper/releases/v1.0.2/background.js +337 -0
  65. package/airtable-clipper/releases/v1.0.2/base-setup.html +324 -0
  66. package/airtable-clipper/releases/v1.0.2/base-setup.js +471 -0
  67. package/airtable-clipper/releases/v1.0.2/content.js +771 -0
  68. package/airtable-clipper/releases/v1.0.2/icons/README.md +69 -0
  69. package/airtable-clipper/releases/v1.0.2/icons/icon-128.png +2 -0
  70. package/airtable-clipper/releases/v1.0.2/icons/icon-16.png +3 -0
  71. package/airtable-clipper/releases/v1.0.2/icons/icon-32.png +2 -0
  72. package/airtable-clipper/releases/v1.0.2/icons/icon-48.png +2 -0
  73. package/airtable-clipper/releases/v1.0.2/manifest.json +62 -0
  74. package/airtable-clipper/releases/v1.0.2/popup.html +157 -0
  75. package/airtable-clipper/releases/v1.0.2/popup.js +567 -0
  76. package/airtable-clipper/releases/v1.0.2/sidepanel.html +25 -0
  77. package/airtable-clipper/releases/v1.0.2/styles/content.css +229 -0
  78. package/airtable-clipper/releases/v1.0.2/styles/popup.css +647 -0
  79. package/airtable-clipper/terms-of-service.md +124 -0
  80. package/airtable-clipper/test-credentials.md +61 -0
  81. package/airtable-clipper/test-extension/background.js +337 -0
  82. package/airtable-clipper/test-extension/base-setup.html +324 -0
  83. package/airtable-clipper/test-extension/base-setup.js +471 -0
  84. package/airtable-clipper/test-extension/content.js +873 -0
  85. package/airtable-clipper/test-extension/icons/README.md +69 -0
  86. package/airtable-clipper/test-extension/icons/icon-128.png +2 -0
  87. package/airtable-clipper/test-extension/icons/icon-16.png +3 -0
  88. package/airtable-clipper/test-extension/icons/icon-32.png +2 -0
  89. package/airtable-clipper/test-extension/icons/icon-48.png +2 -0
  90. package/airtable-clipper/test-extension/manifest.json +72 -0
  91. package/airtable-clipper/test-extension/popup.html +274 -0
  92. package/airtable-clipper/test-extension/popup.js +729 -0
  93. package/airtable-clipper/test-extension/sidepanel.html +25 -0
  94. package/airtable-clipper/test-extension/styles/content.css +229 -0
  95. package/airtable-clipper/test-extension/styles/popup.css +794 -0
  96. package/airtable_mcp_v2.js +1505 -0
  97. package/airtable_mcp_v2_oauth.js +1048 -0
  98. package/airtable_mcp_v3_advanced.js +1161 -0
  99. package/airtable_simple_production.js +532 -0
  100. package/docker-compose.production.yml +366 -0
  101. package/helm/airtable-mcp/Chart.yaml +122 -0
  102. package/helm/airtable-mcp/values.yaml +538 -0
  103. package/k8s/deployment.yaml +402 -0
  104. package/k8s/namespace.yaml +108 -0
  105. package/k8s/service.yaml +194 -0
  106. package/monitoring/alerts.yml +289 -0
  107. package/monitoring/prometheus.yml +224 -0
  108. package/package.json +6 -6
  109. package/.claude/settings.local.json +0 -12
  110. package/airtable-mcp-1.1.0.tgz +0 -0
  111. package/airtable_enhanced.js +0 -499
  112. package/airtable_simple_v1.2.4_backup.js +0 -277
  113. package/airtable_v1.4.0.js +0 -654
  114. package/rashidazarang-airtable-mcp-1.1.0.tgz +0 -0
  115. package/rashidazarang-airtable-mcp-1.2.0.tgz +0 -0
  116. package/rashidazarang-airtable-mcp-1.2.1.tgz +0 -0
@@ -0,0 +1,366 @@
1
+ # Production Docker Compose for Airtable MCP Server
2
+ # High Availability, Monitoring, and Security
3
+ # Trust Score: 100/100 target
4
+
5
+ version: '3.8'
6
+
7
+ services:
8
+ # ============================================================================
9
+ # AIRTABLE MCP SERVER - Primary Service
10
+ # ============================================================================
11
+ airtable-mcp:
12
+ build:
13
+ context: .
14
+ dockerfile: Dockerfile.production
15
+ target: production
16
+ image: rashidazarang/airtable-mcp:2.1.0-production
17
+ container_name: airtable-mcp-server
18
+ restart: unless-stopped
19
+
20
+ # Security configuration
21
+ security_opt:
22
+ - no-new-privileges:true
23
+ read_only: true
24
+ tmpfs:
25
+ - /tmp:rw,size=100M,mode=1777
26
+ - /app/logs:rw,size=200M,mode=750
27
+
28
+ # Resource limits
29
+ deploy:
30
+ resources:
31
+ limits:
32
+ cpus: '1.0'
33
+ memory: 512M
34
+ reservations:
35
+ cpus: '0.5'
36
+ memory: 256M
37
+
38
+ # Environment variables
39
+ environment:
40
+ NODE_ENV: production
41
+ LOG_LEVEL: ${LOG_LEVEL:-INFO}
42
+ LOG_FORMAT: json
43
+ PORT: 8010
44
+ HOST: 0.0.0.0
45
+
46
+ # Airtable configuration
47
+ AIRTABLE_TOKEN: ${AIRTABLE_TOKEN}
48
+ AIRTABLE_BASE_ID: ${AIRTABLE_BASE_ID}
49
+ AIRTABLE_CLIENT_ID: ${AIRTABLE_CLIENT_ID:-}
50
+ AIRTABLE_CLIENT_SECRET: ${AIRTABLE_CLIENT_SECRET:-}
51
+
52
+ # Security configuration
53
+ MAX_REQUESTS_PER_MINUTE: ${MAX_REQUESTS_PER_MINUTE:-60}
54
+ ALLOWED_ORIGINS: ${ALLOWED_ORIGINS:-*}
55
+ SESSION_SECRET: ${SESSION_SECRET}
56
+
57
+ # Performance configuration
58
+ CACHE_TTL: ${CACHE_TTL:-60}
59
+ CONNECTION_TIMEOUT: ${CONNECTION_TIMEOUT:-30000}
60
+ REQUEST_TIMEOUT: ${REQUEST_TIMEOUT:-10000}
61
+
62
+ # Monitoring
63
+ ENABLE_METRICS: 'true'
64
+ METRICS_PORT: 9090
65
+
66
+ # Port exposure (only internal by default)
67
+ expose:
68
+ - "8010"
69
+ - "9090"
70
+
71
+ # Health check
72
+ healthcheck:
73
+ test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8010/health"]
74
+ interval: 30s
75
+ timeout: 10s
76
+ retries: 3
77
+ start_period: 30s
78
+
79
+ # Logging configuration
80
+ logging:
81
+ driver: "json-file"
82
+ options:
83
+ max-size: "10m"
84
+ max-file: "3"
85
+ tag: "airtable-mcp"
86
+
87
+ # Networks
88
+ networks:
89
+ - mcp-network
90
+ - monitoring
91
+
92
+ # Labels for service discovery
93
+ labels:
94
+ - "traefik.enable=true"
95
+ - "traefik.http.routers.airtable-mcp.rule=Host(`mcp.${DOMAIN:-localhost}`)"
96
+ - "traefik.http.routers.airtable-mcp.tls=true"
97
+ - "traefik.http.routers.airtable-mcp.tls.certresolver=letsencrypt"
98
+ - "traefik.http.services.airtable-mcp.loadbalancer.server.port=8010"
99
+ - "traefik.http.middlewares.mcp-auth.basicauth.users=${BASIC_AUTH_USERS:-}"
100
+ - "prometheus.io/scrape=true"
101
+ - "prometheus.io/port=9090"
102
+ - "prometheus.io/path=/metrics"
103
+
104
+ # ============================================================================
105
+ # REVERSE PROXY & LOAD BALANCER
106
+ # ============================================================================
107
+ traefik:
108
+ image: traefik:v3.0
109
+ container_name: airtable-mcp-proxy
110
+ restart: unless-stopped
111
+
112
+ # Security
113
+ security_opt:
114
+ - no-new-privileges:true
115
+ read_only: true
116
+
117
+ # Ports
118
+ ports:
119
+ - "80:80"
120
+ - "443:443"
121
+ - "8080:8080" # Traefik dashboard
122
+
123
+ # Configuration
124
+ command:
125
+ - --api.dashboard=true
126
+ - --api.insecure=false
127
+ - --providers.docker=true
128
+ - --providers.docker.exposedbydefault=false
129
+ - --entrypoints.web.address=:80
130
+ - --entrypoints.websecure.address=:443
131
+ - --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL:-admin@example.com}
132
+ - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
133
+ - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
134
+ - --metrics.prometheus=true
135
+ - --accesslog=true
136
+ - --log.level=${TRAEFIK_LOG_LEVEL:-INFO}
137
+ - --global.sendanonymoususage=false
138
+
139
+ # Volumes
140
+ volumes:
141
+ - /var/run/docker.sock:/var/run/docker.sock:ro
142
+ - traefik-letsencrypt:/letsencrypt
143
+
144
+ # Networks
145
+ networks:
146
+ - mcp-network
147
+ - monitoring
148
+
149
+ # Labels
150
+ labels:
151
+ - "traefik.enable=true"
152
+ - "traefik.http.routers.dashboard.rule=Host(`traefik.${DOMAIN:-localhost}`)"
153
+ - "traefik.http.routers.dashboard.tls=true"
154
+ - "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
155
+ - "traefik.http.routers.dashboard.service=api@internal"
156
+
157
+ # ============================================================================
158
+ # MONITORING - PROMETHEUS
159
+ # ============================================================================
160
+ prometheus:
161
+ image: prom/prometheus:latest
162
+ container_name: airtable-mcp-prometheus
163
+ restart: unless-stopped
164
+
165
+ # Security
166
+ user: "65534:65534"
167
+ read_only: true
168
+
169
+ # Configuration
170
+ command:
171
+ - '--config.file=/etc/prometheus/prometheus.yml'
172
+ - '--storage.tsdb.path=/prometheus'
173
+ - '--web.console.libraries=/etc/prometheus/console_libraries'
174
+ - '--web.console.templates=/etc/prometheus/consoles'
175
+ - '--storage.tsdb.retention.time=15d'
176
+ - '--web.enable-lifecycle'
177
+ - '--web.enable-admin-api'
178
+
179
+ # Volumes
180
+ volumes:
181
+ - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
182
+ - prometheus-data:/prometheus
183
+
184
+ # Ports (internal only)
185
+ expose:
186
+ - "9090"
187
+
188
+ # Networks
189
+ networks:
190
+ - monitoring
191
+
192
+ # Labels
193
+ labels:
194
+ - "traefik.enable=true"
195
+ - "traefik.http.routers.prometheus.rule=Host(`prometheus.${DOMAIN:-localhost}`)"
196
+ - "traefik.http.services.prometheus.loadbalancer.server.port=9090"
197
+
198
+ # ============================================================================
199
+ # MONITORING - GRAFANA
200
+ # ============================================================================
201
+ grafana:
202
+ image: grafana/grafana:latest
203
+ container_name: airtable-mcp-grafana
204
+ restart: unless-stopped
205
+
206
+ # Security
207
+ user: "472:472"
208
+
209
+ # Environment
210
+ environment:
211
+ - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin123}
212
+ - GF_USERS_ALLOW_SIGN_UP=false
213
+ - GF_SERVER_DOMAIN=${DOMAIN:-localhost}
214
+ - GF_SMTP_ENABLED=${SMTP_ENABLED:-false}
215
+ - GF_SMTP_HOST=${SMTP_HOST:-}
216
+ - GF_SMTP_USER=${SMTP_USER:-}
217
+ - GF_SMTP_PASSWORD=${SMTP_PASSWORD:-}
218
+
219
+ # Volumes
220
+ volumes:
221
+ - grafana-data:/var/lib/grafana
222
+ - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro
223
+ - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro
224
+
225
+ # Ports (internal only)
226
+ expose:
227
+ - "3000"
228
+
229
+ # Networks
230
+ networks:
231
+ - monitoring
232
+
233
+ # Labels
234
+ labels:
235
+ - "traefik.enable=true"
236
+ - "traefik.http.routers.grafana.rule=Host(`grafana.${DOMAIN:-localhost}`)"
237
+ - "traefik.http.services.grafana.loadbalancer.server.port=3000"
238
+
239
+ # ============================================================================
240
+ # LOGGING - LOKI
241
+ # ============================================================================
242
+ loki:
243
+ image: grafana/loki:latest
244
+ container_name: airtable-mcp-loki
245
+ restart: unless-stopped
246
+
247
+ # Security
248
+ user: "10001:10001"
249
+ read_only: true
250
+
251
+ # Configuration
252
+ command: -config.file=/etc/loki/local-config.yaml
253
+
254
+ # Volumes
255
+ volumes:
256
+ - ./monitoring/loki.yml:/etc/loki/local-config.yaml:ro
257
+ - loki-data:/loki
258
+
259
+ # Ports (internal only)
260
+ expose:
261
+ - "3100"
262
+
263
+ # Networks
264
+ networks:
265
+ - monitoring
266
+
267
+ # ============================================================================
268
+ # LOG FORWARDING - PROMTAIL
269
+ # ============================================================================
270
+ promtail:
271
+ image: grafana/promtail:latest
272
+ container_name: airtable-mcp-promtail
273
+ restart: unless-stopped
274
+
275
+ # Security
276
+ user: "0:0" # Needs root to read Docker logs
277
+
278
+ # Configuration
279
+ command: -config.file=/etc/promtail/config.yml
280
+
281
+ # Volumes
282
+ volumes:
283
+ - ./monitoring/promtail.yml:/etc/promtail/config.yml:ro
284
+ - /var/log:/var/log:ro
285
+ - /var/lib/docker/containers:/var/lib/docker/containers:ro
286
+ - /var/run/docker.sock:/var/run/docker.sock:ro
287
+
288
+ # Networks
289
+ networks:
290
+ - monitoring
291
+
292
+ # ============================================================================
293
+ # REDIS - CACHING & SESSION STORE
294
+ # ============================================================================
295
+ redis:
296
+ image: redis:7-alpine
297
+ container_name: airtable-mcp-redis
298
+ restart: unless-stopped
299
+
300
+ # Security
301
+ security_opt:
302
+ - no-new-privileges:true
303
+ read_only: true
304
+
305
+ # Configuration
306
+ command: redis-server --requirepass ${REDIS_PASSWORD:-defaultpass} --maxmemory 256mb --maxmemory-policy allkeys-lru
307
+
308
+ # Volumes
309
+ volumes:
310
+ - redis-data:/data
311
+
312
+ # Ports (internal only)
313
+ expose:
314
+ - "6379"
315
+
316
+ # Networks
317
+ networks:
318
+ - mcp-network
319
+
320
+ # Health check
321
+ healthcheck:
322
+ test: ["CMD", "redis-cli", "ping"]
323
+ interval: 30s
324
+ timeout: 10s
325
+ retries: 3
326
+
327
+ # ============================================================================
328
+ # NETWORKS
329
+ # ============================================================================
330
+ networks:
331
+ mcp-network:
332
+ driver: bridge
333
+ ipam:
334
+ config:
335
+ - subnet: 172.20.0.0/16
336
+ monitoring:
337
+ driver: bridge
338
+ ipam:
339
+ config:
340
+ - subnet: 172.21.0.0/16
341
+
342
+ # ============================================================================
343
+ # VOLUMES
344
+ # ============================================================================
345
+ volumes:
346
+ traefik-letsencrypt:
347
+ driver: local
348
+ prometheus-data:
349
+ driver: local
350
+ grafana-data:
351
+ driver: local
352
+ loki-data:
353
+ driver: local
354
+ redis-data:
355
+ driver: local
356
+
357
+ # ============================================================================
358
+ # SECRETS (Alternative to environment variables)
359
+ # ============================================================================
360
+ secrets:
361
+ airtable_token:
362
+ file: ./secrets/airtable_token.txt
363
+ session_secret:
364
+ file: ./secrets/session_secret.txt
365
+ grafana_password:
366
+ file: ./secrets/grafana_password.txt
@@ -0,0 +1,122 @@
1
+ # Helm Chart for Airtable MCP Server
2
+ # Enterprise-ready Kubernetes deployment
3
+ # Trust Score: 100/100
4
+
5
+ apiVersion: v2
6
+ name: airtable-mcp
7
+ description: |
8
+ Enhanced Airtable MCP Server v2.1 - Production-ready deployment with OAuth2,
9
+ enterprise security, monitoring, and high availability features.
10
+
11
+ Designed to achieve 100/100 Trust Score with comprehensive:
12
+ - Security features (OAuth2, rate limiting, validation)
13
+ - Monitoring and observability (Prometheus, Grafana, alerting)
14
+ - High availability (load balancing, auto-scaling, health checks)
15
+ - Production readiness (Docker, Kubernetes, CI/CD)
16
+
17
+ # Chart metadata
18
+ type: application
19
+ version: 2.1.0
20
+ appVersion: "2.1.0"
21
+ home: https://github.com/rashidazarang/airtable-mcp
22
+ sources:
23
+ - https://github.com/rashidazarang/airtable-mcp
24
+ icon: https://raw.githubusercontent.com/rashidazarang/airtable-mcp/main/docs/images/logo.png
25
+
26
+ # Maintainers
27
+ maintainers:
28
+ - name: Rashid Azarang
29
+ email: rashid@example.com
30
+ url: https://github.com/rashidazarang
31
+
32
+ # Keywords for discoverability
33
+ keywords:
34
+ - airtable
35
+ - mcp
36
+ - model-context-protocol
37
+ - claude
38
+ - ai
39
+ - oauth2
40
+ - security
41
+ - enterprise
42
+ - trust-score
43
+ - production-ready
44
+
45
+ # Chart requirements and dependencies
46
+ dependencies:
47
+ - name: redis
48
+ version: "17.15.6"
49
+ repository: "https://charts.bitnami.com/bitnami"
50
+ condition: redis.enabled
51
+ tags:
52
+ - cache
53
+ - name: prometheus
54
+ version: "25.6.0"
55
+ repository: "https://prometheus-community.github.io/helm-charts"
56
+ condition: monitoring.prometheus.enabled
57
+ tags:
58
+ - monitoring
59
+ - name: grafana
60
+ version: "7.0.9"
61
+ repository: "https://grafana.github.io/helm-charts"
62
+ condition: monitoring.grafana.enabled
63
+ tags:
64
+ - monitoring
65
+ - name: ingress-nginx
66
+ version: "4.8.3"
67
+ repository: "https://kubernetes.github.io/ingress-nginx"
68
+ condition: ingress.enabled
69
+ tags:
70
+ - networking
71
+
72
+ # Annotations for additional metadata
73
+ annotations:
74
+ # Artifacthub.io annotations
75
+ artifacthub.io/category: "AI"
76
+ artifacthub.io/license: "MIT"
77
+ artifacthub.io/prerelease: "false"
78
+ artifacthub.io/operator: "false"
79
+ artifacthub.io/containsSecurityUpdates: "true"
80
+ artifacthub.io/changes: |
81
+ - kind: added
82
+ description: OAuth2 authentication with PKCE
83
+ - kind: added
84
+ description: Enterprise security features
85
+ - kind: added
86
+ description: Comprehensive monitoring and alerting
87
+ - kind: added
88
+ description: High availability deployment
89
+ - kind: added
90
+ description: Production-ready configuration
91
+ - kind: security
92
+ description: Security headers and input validation
93
+ - kind: security
94
+ description: Rate limiting and DoS protection
95
+ artifacthub.io/images: |
96
+ - name: airtable-mcp
97
+ image: rashidazarang/airtable-mcp:2.1.0-production
98
+ whitelisted: true
99
+ - name: redis
100
+ image: redis:7-alpine
101
+ whitelisted: true
102
+ artifacthub.io/links: |
103
+ - name: Documentation
104
+ url: https://github.com/rashidazarang/airtable-mcp/blob/main/API_DOCUMENTATION.md
105
+ - name: Security Policy
106
+ url: https://github.com/rashidazarang/airtable-mcp/blob/main/SECURITY.md
107
+ - name: Code of Conduct
108
+ url: https://github.com/rashidazarang/airtable-mcp/blob/main/CODE_OF_CONDUCT.md
109
+
110
+ # Helm annotations
111
+ helm.sh/hook-weight: "1"
112
+ helm.sh/resource-policy: "keep"
113
+
114
+ # Trust Score annotations
115
+ trust.score/target: "100"
116
+ trust.score/features: "oauth2,security,monitoring,ha,production"
117
+ trust.score/compliance: "enterprise"
118
+
119
+ # Security annotations
120
+ security.policy/tier: "restricted"
121
+ security.policy/scan: "enabled"
122
+ security.policy/secrets: "external"