aai-gateway 0.3.1 → 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
|
-
|
|
3
|
+
## One MCP. All Apps. Zero Code Changes.
|
|
4
4
|
|
|
5
|
-
A
|
|
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
|
-
|
|
8
|
+
[](https://www.npmjs.com/package/aai-gateway)
|
|
9
|
+
[](https://github.com/gybob/aai-gateway/blob/main/LICENSE)
|
|
8
10
|
|
|
9
|
-
|
|
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
|
-
|
|
13
|
-
→ Context window
|
|
14
|
-
→ Agent
|
|
15
|
-
→
|
|
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
|
-
**
|
|
35
|
+
**AAI Gateway's Solution**:
|
|
19
36
|
|
|
20
37
|
```
|
|
21
|
-
|
|
22
|
-
→
|
|
23
|
-
|
|
24
|
-
→
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
|
|
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
|
-
|
|
76
|
-
- AAI Gateway: 50 apps + 2 = 52 context entries
|
|
79
|
+
---
|
|
77
80
|
|
|
78
|
-
##
|
|
81
|
+
## 🔐 Security & Consent
|
|
79
82
|
|
|
80
|
-
|
|
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
|
-
|
|
85
|
+
### Per-Caller Authorization
|
|
86
86
|
|
|
87
|
-
|
|
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
|
-
|
|
92
|
+
### Consent Flow
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
103
|
+
This ensures that each MCP client has explicit user authorization, preventing cross-client authorization leakage.
|
|
97
104
|
|
|
98
|
-
|
|
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
|
-
|
|
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
|
-
|
|
110
|
+
These apps have built-in descriptors and work out of the box:
|
|
107
111
|
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
121
|
+
---
|
|
115
122
|
|
|
116
|
-
|
|
123
|
+
## Installation
|
|
117
124
|
|
|
118
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
190
|
+
## CLI Options
|
|
282
191
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
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
|
-
|
|
199
|
+
---
|
|
291
200
|
|
|
292
|
-
|
|
201
|
+
## Appendix
|
|
293
202
|
|
|
294
|
-
|
|
203
|
+
### How to Integrate
|
|
295
204
|
|
|
296
|
-
|
|
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
|
-
|
|
207
|
+
#### Method 1: Provide a Descriptor File
|
|
311
208
|
|
|
312
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
220
|
+
#### Method 2: Contribute to Built-in Registry
|
|
329
221
|
|
|
330
|
-
|
|
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
|
-
|
|
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
|
-
|
|
228
|
+
This is useful for:
|
|
340
229
|
|
|
341
|
-
|
|
230
|
+
- Apps without official API documentation
|
|
231
|
+
- Custom auth configurations
|
|
232
|
+
- Cold-start scenarios
|
|
342
233
|
|
|
343
|
-
|
|
234
|
+
#### Descriptor Format
|
|
344
235
|
|
|
345
|
-
**
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
-
|
|
245
|
+
#### Supported Auth Types
|
|
378
246
|
|
|
379
|
-
|
|
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
|
-
|
|
382
|
-
# List discovered AAI-enabled apps
|
|
383
|
-
npx aai-gateway --scan
|
|
254
|
+
#### Platform Support
|
|
384
255
|
|
|
385
|
-
|
|
386
|
-
|
|
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
|
-
|
|
265
|
+
#### Windows Requirements
|
|
390
266
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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-
|
|
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";
|