aai-gateway 0.3.2 → 0.3.4

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 CHANGED
@@ -1,121 +1,128 @@
1
1
  # AAI Gateway
2
2
 
3
- **One MCP to access all desktop and web applications.**
3
+ ## One MCP. All Apps. Zero Code Changes.
4
4
 
5
- A Model Context Protocol (MCP) server that bridges AI agents to desktop and web applications through the [AAI Protocol](https://github.com/gybob/aai-protocol).
5
+ > A single MCP server that connects AI Agents to all Web and Desktop applications.
6
+ > Apps conforming to the **[AAI Protocol](https://github.com/gybob/aai-protocol)** can be **seamlessly integrated** without developing any source code—just provide a descriptor.
6
7
 
7
- ## The Innovation: Progressive Disclosure
8
+ [![npm version](https://img.shields.io/npm/v/aai-gateway.svg)](https://www.npmjs.com/package/aai-gateway)
9
+ [![License](https://img.shields.io/npm/l/aai-gateway.svg)](https://github.com/gybob/aai-gateway/blob/main/LICENSE)
8
10
 
9
- **Problem**: Traditional MCP servers load all tools upfront, causing context explosion.
11
+ ---
12
+
13
+ ## Why AAI Gateway?
14
+
15
+ | Traditional Approach | AAI Gateway |
16
+ | ------------------------------------------- | ------------------------------------------------- |
17
+ | One MCP Server per App | **One MCP for all applications** |
18
+ | Requires modifying app code | **Zero-code integration, just a descriptor** |
19
+ | Loads all tools at once (context explosion) | **Progressive disclosure, load on-demand** |
20
+ | Platform-specific only | **Cross-platform: Web + macOS + Windows + Linux** |
21
+
22
+ ---
23
+
24
+ ## 🚀 Core Innovation: Progressive Disclosure
25
+
26
+ Traditional MCP servers return all tools on `tools/list`, causing:
10
27
 
11
28
  ```
12
- Traditional: tools/list returns 1000+ tools from 50 apps
13
- → Context window blown
14
- → Agent confused
15
- Performance degraded
29
+ 50 apps × 20 tools per app = 1000+ tool entries
30
+ → Context window explosion
31
+ → Agent performance degradation
32
+ Reduced response accuracy
16
33
  ```
17
34
 
18
- **Our Solution**: Guide-based progressive disclosure.
35
+ **AAI Gateway's Solution**:
19
36
 
20
37
  ```
21
- AAI Gateway: tools/list returns 50 app entries + 2 universal tools
22
- O(apps + 2) instead of O(apps × tools)
23
- Agent calls app:<id> to get tool guide on-demand
24
- Context stays minimal
38
+ tools/list returns only lightweight entries:
39
+ ├── web:discover Discover web apps and get their capabilities
40
+ ├── app:<desktop-app-id> Discovered desktop apps (one entry per app)
41
+ └── aai:exec Universal executor for all operations
42
+
43
+ = 50 apps + 2 tools = 52 entries ✅
44
+
45
+ Agent calls web:discover or app:<id> on-demand to get detailed operation guides
25
46
  ```
26
47
 
27
- This innovation enables agents to discover and use thousands of tools without overwhelming the context window.
48
+ **Result**: **95% reduction** in context usage, faster and more accurate Agent responses.
49
+
50
+ ---
28
51
 
29
52
  ## How It Works
30
53
 
54
+ ### Web App Workflow
55
+
31
56
  ```
32
- ┌─────────────────────────────────────────────────────────────────┐
33
- │ Desktop App Workflow │
34
- ├─────────────────────────────────────────────────────────────────┤
35
- │ │
36
- │ 1. tools/list │
37
- │ └─→ Returns: ["app:com.apple.mail", "app:com.apple.calendar",
38
- │ "web:discover", "aai:exec"] │
39
- │ Only 4 entries! (Not 50+ tools) │
40
- │ │
41
- │ 2. User: "Send an email to John" │
42
- │ └─→ Agent matches "email" → calls app:com.apple.mail │
43
- │ │
44
- │ 3. tools/call("app:com.apple.mail") │
45
- │ └─→ Returns: Operation guide with available tools │
46
- │ - sendEmail(to, subject, body) │
47
- │ - readInbox(folder, limit) │
48
- │ - ... │
49
- │ │
50
- │ 4. tools/call("aai:exec", {app, tool: "sendEmail", args}) │
51
- │ └─→ Executes operation │
52
- │ │
53
- └─────────────────────────────────────────────────────────────────┘
54
-
55
- ┌─────────────────────────────────────────────────────────────────┐
56
- │ Web App Workflow │
57
- ├─────────────────────────────────────────────────────────────────┤
58
- │ │
59
- │ 1. User: "Search my Notion workspace" │
60
- │ └─→ Agent matches "Notion" → calls web:discover │
61
- │ │
62
- │ 2. tools/call("web:discover", {url: "notion.com"}) │
63
- │ └─→ Returns: Operation guide with available tools │
64
- │ - listDatabases(), queryDatabase(id), search(query) │
65
- │ - ... │
66
- │ │
67
- │ 3. tools/call("aai:exec", {app: "notion.com", tool, args}) │
68
- │ └─→ Executes operation │
69
- │ │
70
- └─────────────────────────────────────────────────────────────────┘
57
+ 1. User: "Search my Notion workspace"
58
+ 2. Agent recognizes "Notion" as a web application
59
+ → Calls web:discover to fetch Notion's capabilities
60
+ 3. tools/call("web:discover", {url: "notion.com"})
61
+ Returns operation guide: listDatabases(), queryDatabase(id), search(query)
62
+ 4. tools/call("aai:exec", {app: "notion.com", tool: "search", args: {...}})
63
+ Executes and returns result
71
64
  ```
72
65
 
73
- **Context Efficiency**:
66
+ ### Desktop App Workflow
67
+
68
+ ```
69
+ 1. AAI Gateway scans system for AAI-enabled desktop apps
70
+ → Found apps appear as app:<id> entries in tools/list
71
+ 2. User: "Show my work tasks"
72
+ → Agent finds matching app:guanchen.worklens
73
+ 3. tools/call("app:guanchen.worklens")
74
+ → Returns operation guide: listTasks(), getTaskDetail(id), createTask()
75
+ 4. tools/call("aai:exec", {app: "guanchen.worklens", tool: "listTasks", args: {}})
76
+ → Executes and returns result
77
+ ```
74
78
 
75
- - Traditional: 50 apps × 20 tools = 1000 context entries
76
- - AAI Gateway: 50 apps + 2 = 52 context entries
79
+ ---
77
80
 
78
- ## Features
81
+ ## 🔐 Security & Consent
79
82
 
80
- - **Progressive Disclosure**. Apps expose operation guides on-demand, preventing context explosion.
81
- - **Multi-language Support**. App names support multiple languages for better intent matching.
82
- - **Native Security**. Leverages OS-level consent (TCC, UAC, Polkit) and secure storage (Keychain).
83
- - **Cross-platform**. macOS today, Linux and Windows planned.
83
+ AAI Gateway implements a **caller-aware consent mechanism** to protect user privacy and control:
84
84
 
85
- ## Supported Apps
85
+ ### Per-Caller Authorization
86
86
 
87
- ### Desktop Apps (AAI-enabled)
87
+ - **Client Identification**: When an MCP client (Claude Desktop, Cursor, Windsurf, etc.) requests tool access, AAI Gateway identifies the caller from the MCP protocol metadata
88
+ - **Isolated Consent**: Consent decisions are stored **per caller**, meaning authorization granted to Claude Desktop is NOT automatically granted to Cursor
89
+ - **Clear Dialogs**: Consent dialogs clearly show which client is requesting access: "Claude Desktop wants to use: sendEmail"
90
+ - **Re-authorization Required**: Different MCP clients must obtain their own authorization for the same tools
88
91
 
89
- Apps shipping `aai.json` descriptor:
92
+ ### Consent Flow
90
93
 
91
- | App | Platform | Tools |
92
- | --------------- | -------- | ----------------------------------------------- |
93
- | macOS Reminders | macOS | createReminder, listReminders, completeReminder |
94
- | Your app here | - | - |
94
+ ```
95
+ 1. MCP client (e.g., Cursor) calls a tool for the first time
96
+ 2. AAI Gateway checks: Has Cursor been authorized for this tool?
97
+ 3. If not Show consent dialog: "Cursor wants to use: sendEmail"
98
+ 4. User decision is stored with caller identity: consents["Cursor"]["com.example.mail"]["sendEmail"]
99
+ 5. Next call from Cursor → No dialog (already authorized)
100
+ 6. Claude Desktop calls same tool → Consent dialog shown (different caller)
101
+ ```
95
102
 
96
- ### Web Apps (Built-in Descriptors)
103
+ This ensures that each MCP client has explicit user authorization, preventing cross-client authorization leakage.
97
104
 
98
- Pre-configured descriptors for cold-start scenarios when `.well-known/aai.json` is unavailable:
105
+ > 💡 **Note**: Caller identity is informational and not a security boundary. The real security is enforced by the operating system (TCC on macOS, UAC on Windows, etc.).
106
+ ---
99
107
 
100
- | App | Auth Type | Description |
101
- | ----------------- | -------------- | ------------------------ |
102
- | **Notion** | API Key | All-in-one workspace |
103
- | **Yuque (语雀)** | API Key | Knowledge management |
104
- | **Feishu (飞书)** | App Credential | Enterprise collaboration |
108
+ ## 📱 Supported Apps
105
109
 
106
- _More built-in descriptors being added. [Request one](https://github.com/gybob/aai-gateway/issues)_
110
+ These apps have built-in descriptors and work out of the box:
107
111
 
108
- ## Requirements
112
+ | App | Auth Type | Tools | Description |
113
+ | ----------------- | -------------- | ----- | --------------------------------------------------- |
114
+ | **Notion** | API Key | 11 | Notes, docs, knowledge base, project management |
115
+ | **Yuque (语雀)** | API Key | 7 | Alibaba Cloud knowledge management platform |
116
+ | **Feishu / Lark** | App Credential | 11 | Enterprise collaboration (docs, wiki, IM, calendar) |
117
+ > 💡 Want to add your app? See [How to Integrate](#how-to-integrate) | [Upcoming Apps](#upcoming-apps)
109
118
 
110
- - Node.js 18 or newer
111
- - macOS (Linux and Windows support planned)
112
- - VS Code, Cursor, Windsurf, Claude Desktop, or any MCP client
119
+ > ⚠️ **Note**: AAI Gateway is currently in active development. Bugs may exist. Contributions are welcome!
113
120
 
114
- ## Getting Started
121
+ ---
115
122
 
116
- Add AAI Gateway to your MCP client configuration.
123
+ ## Installation
117
124
 
118
- **Standard config:**
125
+ Add AAI Gateway to your MCP client configuration:
119
126
 
120
127
  ```json
121
128
  {
@@ -140,7 +147,7 @@ claude mcp add aai-gateway npx aai-gateway
140
147
  <details>
141
148
  <summary>Claude Desktop</summary>
142
149
 
143
- Follow the MCP install [guide](https://modelcontextprotocol.io/quickstart/user), use the standard config above. Config file location: `~/Library/Application Support/Claude/claude_desktop_config.json`
150
+ Follow the [MCP installation guide](https://modelcontextprotocol.io/quickstart/user). Config: `~/Library/Application Support/Claude/claude_desktop_config.json`
144
151
 
145
152
  </details>
146
153
 
@@ -151,22 +158,18 @@ Follow the MCP install [guide](https://modelcontextprotocol.io/quickstart/user),
151
158
  code --add-mcp '{"name":"aai-gateway","command":"npx","args":["aai-gateway"]}'
152
159
  ```
153
160
 
154
- Or add manually to your MCP settings.
155
-
156
161
  </details>
157
162
 
158
163
  <details>
159
164
  <summary>Cursor</summary>
160
165
 
161
- Go to `Cursor Settings` -> `MCP` -> `Add new MCP Server`. Name: `aai-gateway`, type: `command`, command: `npx aai-gateway`.
166
+ `Cursor Settings` `MCP` `Add new MCP Server`. Name: `aai-gateway`, Type: `command`, Command: `npx aai-gateway`
162
167
 
163
168
  </details>
164
169
 
165
170
  <details>
166
171
  <summary>OpenCode</summary>
167
172
 
168
- Add to `~/.config/opencode/opencode.json`:
169
-
170
173
  ```json
171
174
  {
172
175
  "$schema": "https://opencode.ai/config.json",
@@ -180,225 +183,224 @@ Add to `~/.config/opencode/opencode.json`:
180
183
  }
181
184
  ```
182
185
 
183
- With `--dev` flag:
184
-
185
- ```json
186
- {
187
- "$schema": "https://opencode.ai/config.json",
188
- "mcp": {
189
- "aai-gateway": {
190
- "type": "local",
191
- "command": ["npx", "aai-gateway", "--dev"],
192
- "enabled": true
193
- }
194
- }
195
- }
196
- ```
197
-
198
186
  </details>
199
187
 
200
- ## Configuration
201
-
202
- | Option | Description |
203
- | ----------- | ------------------------------------------------------------------------------ |
204
- | `--dev` | Enable development mode. Scans Xcode build directories for apps in development |
205
- | `--scan` | Scan for AAI-enabled apps and exit (for debugging) |
206
- | `--version` | Show version |
207
- | `--help` | Show help |
208
-
209
- **Development mode example:**
210
-
211
- ```json
212
- {
213
- "mcpServers": {
214
- "aai-gateway": {
215
- "command": "npx",
216
- "args": ["aai-gateway", "--dev"]
217
- }
218
- }
219
- }
220
- ```
221
-
222
- ## MCP Interface
223
-
224
- AAI Gateway exposes **tools only** (no resources). This simplifies the agent workflow.
225
-
226
- ### `tools/list`
227
-
228
- Returns discovered desktop apps plus universal tools:
229
-
230
- ```json
231
- {
232
- "tools": [
233
- {
234
- "name": "app:com.apple.reminders",
235
- "description": "【Reminders|提醒事项|Rappels】macOS reminders app. Aliases: todo, 待办. Call to get guide.",
236
- "inputSchema": { "type": "object", "properties": {} }
237
- },
238
- {
239
- "name": "web:discover",
240
- "description": "Discover web app guide. Use when user mentions a web service not in list.",
241
- "inputSchema": {
242
- "type": "object",
243
- "properties": {
244
- "url": { "type": "string", "description": "Web app URL, domain, or name" }
245
- },
246
- "required": ["url"]
247
- }
248
- },
249
- {
250
- "name": "aai:exec",
251
- "description": "Execute app operation. Use after reading the operation guide.",
252
- "inputSchema": {
253
- "type": "object",
254
- "properties": {
255
- "app": { "type": "string", "description": "App ID or URL" },
256
- "tool": { "type": "string", "description": "Operation name" },
257
- "args": { "type": "object", "description": "Operation parameters" }
258
- },
259
- "required": ["app", "tool"]
260
- }
261
- }
262
- ]
263
- }
264
- ```
265
-
266
- ### App Tool (`app:*`)
267
-
268
- Call `app:<app-id>` to get an operation guide:
269
-
270
- ```json
271
- {
272
- "name": "app:com.apple.reminders",
273
- "arguments": {}
274
- }
275
- ```
276
-
277
- Returns a guide with available operations, parameters, and usage examples.
278
-
279
- ### Web Discovery (`web:discover`)
188
+ ---
280
189
 
281
- Discover web apps by URL, domain, or name:
190
+ ## CLI Options
282
191
 
283
- ```json
284
- {
285
- "name": "web:discover",
286
- "arguments": { "url": "notion.com" }
287
- }
288
- ```
192
+ | Option | Description |
193
+ | ----------- | ----------------------------------------------- |
194
+ | `--dev` | Development mode, scans Xcode build directories |
195
+ | `--scan` | Scan for AAI-enabled apps and exit |
196
+ | `--version` | Show version |
197
+ | `--help` | Show help |
289
198
 
290
- Returns the web app's operation guide.
199
+ ---
291
200
 
292
- ### Tool Execution (`aai:exec`)
201
+ ## Appendix
293
202
 
294
- Execute operations after reading the guide:
203
+ ### How to Integrate
295
204
 
296
- ```json
297
- {
298
- "name": "aai:exec",
299
- "arguments": {
300
- "app": "com.apple.reminders",
301
- "tool": "createReminder",
302
- "args": {
303
- "title": "Submit report",
304
- "due": "2024-12-31 15:00"
305
- }
306
- }
307
- }
308
- ```
205
+ There are two ways to integrate an app with AAI Gateway:
309
206
 
310
- **Execution flow:**
207
+ #### Method 1: Provide a Descriptor File
311
208
 
312
- 1. Resolve app descriptor (local, built-in, or web fetch)
313
- 2. Show native consent dialog — user approves/denies
314
- 3. **Auth**:
315
- - Desktop apps: Native IPC
316
- - Web apps: OAuth 2.1 PKCE, API Key, App Credential, or Cookie
317
- 4. Execute and return result
209
+ Place an `aai.json` descriptor at the standard location:
318
210
 
319
- ## Authentication Types
211
+ | Platform | Location |
212
+ | ----------- | -------------------------------------------- |
213
+ | **Web** | `https://<your-domain>/.well-known/aai.json` |
214
+ | **macOS** | `<App>.app/Contents/Resources/aai.json` |
215
+ | **Windows** | `<App>.exe directory/aai.json` |
216
+ | **Linux** | `/usr/share/<app>/aai.json` |
320
217
 
321
- | Auth Type | Use Case | User Flow |
322
- | --------------- | ------------------ | ---------------------------------- |
323
- | `oauth2` | User authorization | Browser-based OAuth 2.0 with PKCE |
324
- | `apiKey` | Static API tokens | Dialog prompts for token |
325
- | `appCredential` | Enterprise apps | Dialog prompts for App ID + Secret |
326
- | `cookie` | No official API | Manual cookie extraction |
218
+ AAI Gateway will automatically discover and load the descriptor.
327
219
 
328
- ## Platform Support
220
+ #### Method 2: Contribute to Built-in Registry
329
221
 
330
- | Platform | Discovery | IPC Executor | Consent Dialog | Secure Storage |
331
- | -------- | ------------------------- | --------------- | ----------------- | --------------------- |
332
- | macOS | ✅ | ✅ Apple Events | ✅ osascript | ✅ Keychain |
333
- | Linux | ⚠️ XDG paths | ⚠️ DBus | ⚠️ zenity/kdialog | ⚠️ libsecret |
334
- | Windows | ⚠️ Program Files | ⚠️ COM | ⚠️ PowerShell | ⚠️ Credential Manager |
335
- | Web | ✅ `.well-known/aai.json` | ✅ HTTP + Auth | — | ✅ (via platform) |
222
+ For web apps without a hosted descriptor, you can add a built-in descriptor to AAI Gateway:
336
223
 
337
- **Legend**: Fully implemented | ⚠️ Stub implementation (throws NOT_IMPLEMENTED) | 🔜 Planned
224
+ 1. Create `src/discovery/descriptors/<app>.ts` following existing patterns
225
+ 2. Register in `src/discovery/web-registry.ts`
226
+ 3. Submit a pull request
338
227
 
339
- ## For App Developers
228
+ This is useful for:
340
229
 
341
- To make your app discoverable by AAI Gateway, ship an `aai.json` descriptor:
230
+ - Apps without official API documentation
231
+ - Custom auth configurations
232
+ - Cold-start scenarios
342
233
 
343
- **macOS:** `<App>.app/Contents/Resources/aai.json`
234
+ #### Descriptor Format
344
235
 
345
- **Web:** `https://<your-domain>/.well-known/aai.json`
236
+ The descriptor follows the **[AAI Protocol specification](https://github.com/gybob/aai-protocol/blob/main/spec/aai-json.md)**. Key points:
346
237
 
347
- **Example:**
238
+ - All field names use **camelCase** (e.g., `schemaVersion`, `baseUrl`)
239
+ - Supports **internationalized names** with language fallback
240
+ - Auth types: `oauth2`, `apiKey`, `appCredential`, `cookie`
241
+ - Tools defined with JSON Schema parameters
348
242
 
349
- ```json
350
- {
351
- "schemaVersion": "1.0",
352
- "version": "1.0.0",
353
- "platform": "web",
354
- "app": {
355
- "id": "com.example.api",
356
- "name": {
357
- "en": "Example App",
358
- "zh-CN": "示例应用"
359
- },
360
- "defaultLang": "en",
361
- "description": "Brief description",
362
- "aliases": ["example", "示例"]
363
- },
364
- "auth": {
365
- "type": "apiKey",
366
- "apiKey": {
367
- "location": "header",
368
- "name": "Authorization",
369
- "prefix": "Bearer",
370
- "obtainUrl": "https://example.com/settings/tokens"
371
- }
372
- },
373
- "tools": [...]
374
- }
375
- ```
243
+ For the complete spec, see **[aai.json Descriptor Spec](https://github.com/gybob/aai-protocol/blob/main/spec/aai-json.md)**.
376
244
 
377
- See the [AAI Protocol Spec](https://github.com/gybob/aai-protocol) for the full schema.
245
+ #### Supported Auth Types
378
246
 
379
- ## Debugging
247
+ | Type | Use Case | User Flow |
248
+ | --------------- | ------------------ | -------------------------- |
249
+ | `oauth2` | User authorization | Browser OAuth 2.0 + PKCE |
250
+ | `apiKey` | Static API tokens | Dialog prompts for token |
251
+ | `appCredential` | Enterprise apps | Dialog for App ID + Secret |
252
+ | `cookie` | No official API | Manual cookie extraction |
380
253
 
381
- ```bash
382
- # List discovered AAI-enabled apps
383
- npx aai-gateway --scan
254
+ #### Platform Support
384
255
 
385
- # Include Xcode build products
386
- npx aai-gateway --scan --dev
387
- ```
256
+ | Platform | Discovery | IPC | Consent | Storage |
257
+ | ----------- | ---------------------- | ------------ | --------- | -------- |
258
+ | **macOS** | Supported | Apple Events | osascript | Keychain |
259
+ | **Linux** | XDG paths | DBus (gdbus) | zenity/kdialog | libsecret |
260
+ | **Windows** | Program Files | COM (PowerShell) | PowerShell | CredMan |
261
+ | **Web** | `.well-known/aai.json` | HTTP | N/A | Platform |
262
+
263
+ > **Note**: Linux and Windows implementations are functional but may require additional testing and refinement. Contributions are welcome!
388
264
 
389
- ## Development
265
+ #### Windows Requirements
390
266
 
391
- ```bash
392
- npm install
393
- npm run typecheck
394
- npm test
395
- npm run build
396
- ```
267
+ - **PowerShell 5.1+** (comes with Windows 10+)
268
+ - **Execution Policy**: Must allow script execution
269
+ ```powershell
270
+ # Check current policy
271
+ Get-ExecutionPolicy
272
+
273
+ # Set to allow local scripts (recommended)
274
+ Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
275
+ ```
276
+ - **Credential Manager**: Built-in Windows feature, no additional setup needed
397
277
 
278
+ #### Linux Requirements
279
+
280
+ - **DBus**: Usually pre-installed on modern Linux distributions
281
+ - **Dialog Tools**: Install one of the following:
282
+ ```bash
283
+ # Ubuntu/Debian
284
+ sudo apt install zenity # or kdialog
285
+
286
+ # Fedora
287
+ sudo dnf install zenity # or kdialog
288
+
289
+ # Arch Linux
290
+ sudo pacman -S zenity # or kdialog
291
+ ```
292
+ - **libsecret**: For secure credential storage
293
+ ```bash
294
+ # Ubuntu/Debian
295
+ sudo apt install libsecret-tools
296
+
297
+ # Fedora
298
+ sudo dnf install libsecret
299
+ ```
300
+
301
+ ---
302
+
303
+ ### Upcoming Apps
304
+
305
+ The following apps are planned for future integration, organized by priority:
306
+
307
+ #### 🚀 Priority P0 - High Activity + Simple Integration
308
+
309
+ | App | Auth Type | API Base | Description |
310
+ |-----|-----------|----------|-------------|
311
+ | **GitHub** | OAuth2 / API Key | `api.github.com` | Code hosting, repositories, issues, PRs |
312
+ | **Linear** | API Key | `api.linear.app` | Modern project management |
313
+ | **Stripe** | API Key | `api.stripe.com` | Payment processing |
314
+ | **Slack** | OAuth2 / Bot Token | `slack.com/api` | Team messaging and channels |
315
+ | **Jira** | OAuth2 / API Token | `api.atlassian.com` | Issue and project tracking |
316
+ | **Gitee** | API Key | `gitee.com/api/v5` | Code hosting (China) |
317
+
318
+ #### 🔥 Priority P1 - High Activity
319
+
320
+ | App | Auth Type | API Base | Description |
321
+ |-----|-----------|----------|-------------|
322
+ | **Google Drive** | OAuth2 | `www.googleapis.com/drive` | Cloud storage and files |
323
+ | **Google Calendar** | OAuth2 | `www.googleapis.com/calendar` | Calendar and scheduling |
324
+ | **Airtable** | API Key / OAuth2 | `api.airtable.com` | Database and spreadsheets |
325
+ | **Trello** | API Key + Token | `api.trello.com/1` | Kanban boards |
326
+ | **Asana** | API Key / OAuth2 | `app.asana.com/api/1.0` | Project management |
327
+ | **Discord** | Bot Token / OAuth2 | `discord.com/api/v10` | Community messaging |
328
+ | **GitLab** | API Key / OAuth2 | `gitlab.com/api/v4` | DevOps platform |
329
+ | **DingTalk (钉钉)** | App Credential | `api.dingtalk.com/v1.0` | Enterprise messaging (China) |
330
+ | **WeCom (企业微信)** | App Credential | `qyapi.weixin.qq.com/cgi-bin` | Enterprise WeChat (China) |
331
+
332
+ #### 📈 Priority P2 - Medium Activity
333
+
334
+ **Project Management & Collaboration:**
335
+
336
+ | App | Auth Type | Description |
337
+ |-----|-----------|-------------|
338
+ | Monday.com | API Key | Work management platform |
339
+ | ClickUp | API Key | Productivity platform |
340
+ | Basecamp | OAuth2 | Project collaboration |
341
+ | Bitbucket | API Key / OAuth2 | Git repository hosting |
342
+
343
+ **Communication & Email:**
344
+
345
+ | App | Auth Type | Description |
346
+ |-----|-----------|-------------|
347
+ | Gmail | OAuth2 | Email by Google |
348
+ | Microsoft Outlook | OAuth2 | Email by Microsoft |
349
+ | SendGrid | API Key | Email delivery service |
350
+ | Mailgun | API Key | Email API service |
351
+ | Twilio | API Key | SMS and voice API |
352
+ | Tencent Meeting | OAuth2 / App Credential | Video conferencing (China) |
353
+
354
+ **Data & Storage:**
355
+
356
+ | App | Auth Type | Description |
357
+ |-----|-----------|-------------|
358
+ | Supabase | API Key | Backend-as-a-Service |
359
+ | PlanetScale | API Key | Serverless MySQL |
360
+ | Neon | API Key | Serverless PostgreSQL |
361
+ | Aliyun Drive | OAuth2 | Cloud storage (China) |
362
+ | Baidu Netdisk | OAuth2 | Cloud storage (China) |
363
+
364
+ **Payments & Commerce:**
365
+
366
+ | App | Auth Type | Description |
367
+ |-----|-----------|-------------|
368
+ | PayPal | OAuth2 | Payment platform |
369
+ | Square | API Key | Payment processing |
370
+ | Shopify | API Key | E-commerce platform |
371
+ | WeChat Pay | App Credential | Payment platform (China) |
372
+
373
+ #### 🔍 Priority P3 - Search & AI
374
+
375
+ | App | Auth Type | API Base | Description |
376
+ |-----|-----------|----------|-------------|
377
+ | Brave Search | API Key | `api.search.brave.com/res/v1` | Privacy-focused search |
378
+ | Perplexity | API Key | `api.perplexity.ai` | AI search engine |
379
+ | Exa | API Key | `api.exa.ai` | AI-powered search |
380
+ | Tavily | API Key | `api.tavily.com` | Search API for AI |
381
+
382
+ #### ❌ Not Suitable for AAI Gateway
383
+
384
+ The following MCP server types are **NOT suitable** for AAI Gateway as they require local implementation:
385
+
386
+ | Type | Examples | Reason |
387
+ |------|----------|--------|
388
+ | Local Filesystem | Filesystem, Memory | Requires local file access |
389
+ | Version Control | Git | Requires local git commands |
390
+ | Browser Automation | Playwright, Puppeteer | Requires browser instance |
391
+ | Code Execution | E2B, Riza | Requires sandbox environment |
392
+ | Database Drivers | PostgreSQL, MySQL, SQLite | Requires database drivers |
393
+ | System Commands | Shell, Terminal | Requires local command execution |
394
+
395
+ ---
396
+
397
+ Want to see your app prioritized? [Open an issue](https://github.com/gybob/aai-gateway/issues).
398
398
  ## Links
399
399
 
400
- - [AAI Protocol Spec](https://github.com/gybob/aai-protocol)
401
- - [Report Issues](https://github.com/gybob/aai-gateway/issues)
400
+ - **[AAI Protocol Spec](https://github.com/gybob/aai-protocol)** - Protocol specification
401
+ - [Report Issues](https://github.com/gybob/aai-gateway/issues) - Bug reports and feature requests
402
+
403
+ ---
402
404
 
403
405
  ## License
404
406
 
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { b as createDesktopDiscovery, d as createGatewayServer, l as logger } from "./server-CGpNZvfw.js";
2
+ import { b as createDesktopDiscovery, d as createGatewayServer, l as logger } from "./server-BYtx5KIZ.js";
3
3
  import { readFileSync } from "fs";
4
4
  import { fileURLToPath } from "url";
5
5
  import { dirname, join } from "path";