aai-gateway 0.3.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -310
- package/dist/cli.js +386 -74
- package/dist/cli.js.map +1 -1
- package/dist/index.js +465 -15
- package/dist/index.js.map +1 -1
- package/dist/{server-DrBOLU_J.js → server-C2Hyt-lR.js} +7361 -3031
- package/dist/server-C2Hyt-lR.js.map +1 -0
- package/package.json +1 -1
- package/dist/server-DrBOLU_J.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,421 +1,301 @@
|
|
|
1
1
|
# AAI Gateway
|
|
2
2
|
|
|
3
|
-
## One MCP.
|
|
3
|
+
## One MCP. Many Apps. Less Context.
|
|
4
4
|
|
|
5
|
-
|
|
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.
|
|
5
|
+
AAI Gateway turns many apps, agents, skills, and MCP servers into one MCP server.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
[](https://github.com/gybob/aai-gateway/blob/main/LICENSE)
|
|
7
|
+
You connect your AI tool once. AAI Gateway handles discovery, import, routing, and exposure control behind that single entrypoint.
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
Why this matters:
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
- One MCP connection instead of one MCP per app
|
|
12
|
+
- Smaller context because tools are exposed at the app level first, not dumped all at once
|
|
13
|
+
- A cleaner path to mix MCP servers, skills, ACP agents, and CLI-backed apps
|
|
14
14
|
|
|
15
|
-
|
|
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** |
|
|
15
|
+
AAI Gateway is for one goal: make tool ecosystems feel smaller, sharper, and easier for agents to use.
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
## How To Use
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
### 1. Connect Your AI Tool To AAI Gateway
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
You do not need to preinstall `aai-gateway`.
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
Use the same style users already know from mainstream MCP setups: launch it through `npx`.
|
|
29
24
|
|
|
30
|
-
|
|
25
|
+
### Claude Code
|
|
31
26
|
|
|
32
|
-
|
|
27
|
+
Official docs: <https://code.claude.com/docs/en/mcp>
|
|
33
28
|
|
|
29
|
+
```bash
|
|
30
|
+
claude mcp add --transport stdio aai-gateway -- npx -y aai-gateway
|
|
34
31
|
```
|
|
35
|
-
50 apps × 20 tools per app = 1000+ tool entries
|
|
36
|
-
→ Context window explosion
|
|
37
|
-
→ Agent performance degradation
|
|
38
|
-
→ Reduced response accuracy
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 1. Progressive Disclosure
|
|
42
|
-
|
|
43
|
-
AAI Gateway's solution:
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
tools/list returns only lightweight entries:
|
|
47
|
-
├── web:discover → Discover web apps and get their capabilities
|
|
48
|
-
├── app:<desktop-app-id> → Discovered desktop apps (one entry per app)
|
|
49
|
-
└── aai:exec → Universal executor for all operations
|
|
50
|
-
|
|
51
|
-
= 50 apps + 2 tools = 52 entries ✅
|
|
52
|
-
|
|
53
|
-
Agent calls web:discover or app:<id> on-demand to get detailed operation guides
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Result**: **95% reduction** in context usage, faster and more accurate Agent responses.
|
|
57
32
|
|
|
58
|
-
###
|
|
33
|
+
### Codex
|
|
59
34
|
|
|
60
|
-
|
|
35
|
+
Official docs: <https://developers.openai.com/learn/docs-mcp>
|
|
61
36
|
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
- Tool definitions
|
|
65
|
-
- Parameter schemas
|
|
66
|
-
- Authentication requirements
|
|
67
|
-
|
|
68
|
-
For the full descriptor format, see the **[AAI Protocol `aai.json` spec](https://github.com/gybob/aai-protocol/blob/main/spec/aai-json.md)**.
|
|
69
|
-
|
|
70
|
-
---
|
|
71
|
-
|
|
72
|
-
## How It Works
|
|
73
|
-
|
|
74
|
-
### Web App Workflow
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
1. User: "Search my Notion workspace"
|
|
78
|
-
2. Agent recognizes "Notion" as a web application
|
|
79
|
-
→ Calls web:discover to fetch Notion's capabilities
|
|
80
|
-
3. tools/call("web:discover", {url: "notion.com"})
|
|
81
|
-
→ Returns operation guide: listDatabases(), queryDatabase(id), search(query)
|
|
82
|
-
4. tools/call("aai:exec", {app: "notion.com", tool: "search", args: {...}})
|
|
83
|
-
→ Executes and returns result
|
|
37
|
+
```bash
|
|
38
|
+
codex mcp add aai-gateway -- npx -y aai-gateway
|
|
84
39
|
```
|
|
85
40
|
|
|
86
|
-
###
|
|
41
|
+
### OpenCode
|
|
87
42
|
|
|
88
|
-
|
|
89
|
-
1. AAI Gateway scans system for AAI-enabled desktop apps
|
|
90
|
-
→ Found apps appear as app:<id> entries in tools/list
|
|
91
|
-
2. User: "Show my work tasks"
|
|
92
|
-
→ Agent finds matching app:guanchen.worklens
|
|
93
|
-
3. tools/call("app:guanchen.worklens")
|
|
94
|
-
→ Returns operation guide: listTasks(), getTaskDetail(id), createTask()
|
|
95
|
-
4. tools/call("aai:exec", {app: "guanchen.worklens", tool: "listTasks", args: {}})
|
|
96
|
-
→ Executes and returns result
|
|
97
|
-
```
|
|
43
|
+
Official docs: <https://opencode.ai/docs/config> and <https://opencode.ai/docs/mcp-servers/>
|
|
98
44
|
|
|
99
|
-
|
|
45
|
+
Add this to `~/.config/opencode/opencode.json` or your project `opencode.json`:
|
|
100
46
|
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"$schema": "https://opencode.ai/config.json",
|
|
50
|
+
"mcp": {
|
|
51
|
+
"aai-gateway": {
|
|
52
|
+
"type": "local",
|
|
53
|
+
"command": ["npx", "-y", "aai-gateway"],
|
|
54
|
+
"enabled": true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
110
58
|
```
|
|
111
59
|
|
|
112
|
-
|
|
60
|
+
### What You Get After Connecting
|
|
113
61
|
|
|
114
|
-
|
|
62
|
+
Once connected, your AI tool can use AAI Gateway tools such as:
|
|
115
63
|
|
|
116
|
-
|
|
64
|
+
- `remote:discover`
|
|
65
|
+
- `aai:exec`
|
|
66
|
+
- `mcp:import`
|
|
67
|
+
- `skill:import`
|
|
68
|
+
- `mcp:refresh`
|
|
69
|
+
- `import:config`
|
|
117
70
|
|
|
118
|
-
|
|
119
|
-
- **Isolated Consent**: Consent decisions are stored **per caller**, meaning authorization granted to Claude Desktop is NOT automatically granted to Cursor
|
|
120
|
-
- **Clear Dialogs**: Consent dialogs clearly show which client is requesting access: "Claude Desktop wants to use: sendEmail"
|
|
121
|
-
- **Re-authorization Required**: Different MCP clients must obtain their own authorization for the same tools
|
|
71
|
+
### 2. Import An MCP Server
|
|
122
72
|
|
|
123
|
-
|
|
73
|
+
The main workflow is: copy a mainstream MCP config snippet into your AI tool and ask it to import that server through AAI Gateway.
|
|
124
74
|
|
|
125
|
-
|
|
126
|
-
1. MCP client (e.g., Cursor) calls a tool for the first time
|
|
127
|
-
2. AAI Gateway checks: Has Cursor been authorized for this tool?
|
|
128
|
-
3. If not → Show consent dialog: "Cursor wants to use: sendEmail"
|
|
129
|
-
4. User decision is stored with caller identity: consents["Cursor"]["com.example.mail"]["sendEmail"]
|
|
130
|
-
5. Next call from Cursor → No dialog (already authorized)
|
|
131
|
-
6. Claude Desktop calls same tool → Consent dialog shown (different caller)
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
This ensures that each MCP client has explicit user authorization, preventing cross-client authorization leakage.
|
|
135
|
-
|
|
136
|
-
> 💡 **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.).
|
|
137
|
-
|
|
138
|
-
---
|
|
75
|
+
The AI tool should:
|
|
139
76
|
|
|
140
|
-
|
|
77
|
+
1. read the MCP config you pasted
|
|
78
|
+
2. ask you to choose an exposure mode
|
|
79
|
+
3. call `mcp:import`
|
|
141
80
|
|
|
142
|
-
|
|
81
|
+
AAI Gateway keeps the import parameters close to normal MCP config shapes:
|
|
143
82
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
| **Notion** | Web | API Key | 11 | Notes, docs, knowledge base, project management |
|
|
147
|
-
| **Yuque (语雀)** | Web | API Key | 7 | Alibaba Cloud knowledge management platform |
|
|
148
|
-
| **Feishu / Lark** | Web | App Credential | 11 | Enterprise collaboration (docs, wiki, IM, calendar) |
|
|
149
|
-
| **OpenCode** | ACP Agent | None | 4 | Open-source AI coding agent with terminal UI |
|
|
150
|
-
| **Claude Code** | ACP Agent | None | 4 | Anthropic's official AI coding agent |
|
|
151
|
-
| **Gemini CLI** | ACP Agent | None | 4 | Google's Gemini CLI coding agent |
|
|
83
|
+
- stdio MCP: `command`, `args`, `env`, `cwd`
|
|
84
|
+
- remote MCP: `url`, optional `transport`, optional `headers`
|
|
152
85
|
|
|
153
|
-
|
|
86
|
+
Before import, the AI tool should ask you to choose:
|
|
154
87
|
|
|
155
|
-
|
|
88
|
+
- `summary`: easier automatic triggering
|
|
89
|
+
- `keywords`: leaves room for more tools, but usually needs more explicit keyword mentions
|
|
156
90
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
## Installation
|
|
160
|
-
|
|
161
|
-
Add AAI Gateway to your MCP client configuration:
|
|
91
|
+
Example: import a normal stdio MCP config
|
|
162
92
|
|
|
163
93
|
```json
|
|
164
94
|
{
|
|
165
|
-
"
|
|
166
|
-
|
|
167
|
-
"command": "npx",
|
|
168
|
-
"args": ["aai-gateway"]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
95
|
+
"command": "npx",
|
|
96
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
|
|
171
97
|
}
|
|
172
98
|
```
|
|
173
99
|
|
|
174
|
-
|
|
175
|
-
<summary>Claude Code</summary>
|
|
100
|
+
Example: import a normal remote Streamable HTTP MCP config
|
|
176
101
|
|
|
177
|
-
```
|
|
178
|
-
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"url": "https://example.com/mcp"
|
|
105
|
+
}
|
|
179
106
|
```
|
|
180
107
|
|
|
181
|
-
|
|
108
|
+
Example: import a normal remote SSE MCP config
|
|
182
109
|
|
|
183
|
-
|
|
184
|
-
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"url": "https://example.com/sse",
|
|
113
|
+
"transport": "sse"
|
|
114
|
+
}
|
|
115
|
+
```
|
|
185
116
|
|
|
186
|
-
|
|
117
|
+
After import, AAI Gateway returns:
|
|
187
118
|
|
|
188
|
-
|
|
119
|
+
- the generated app id
|
|
120
|
+
- the generated `keywords`
|
|
121
|
+
- the generated `summary`
|
|
122
|
+
- the guide tool name: `app:<id>`
|
|
189
123
|
|
|
190
|
-
|
|
191
|
-
<summary>Copilot / VS Code</summary>
|
|
124
|
+
Important:
|
|
192
125
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
126
|
+
- Restart your AI tool before using the newly imported tool.
|
|
127
|
+
- After restart, the imported app will appear as `app:<id>`.
|
|
128
|
+
- Use `aai:exec` to actually run the imported app’s operations.
|
|
196
129
|
|
|
197
|
-
|
|
130
|
+
### 3. Import A Skill
|
|
198
131
|
|
|
199
|
-
|
|
200
|
-
<summary>Cursor</summary>
|
|
132
|
+
Skills are imported through the AI tool as well.
|
|
201
133
|
|
|
202
|
-
|
|
134
|
+
Ask the AI tool to call `skill:import`, then give it either:
|
|
203
135
|
|
|
204
|
-
|
|
136
|
+
- a local skill path
|
|
137
|
+
- a remote skill root URL that exposes `SKILL.md`
|
|
205
138
|
|
|
206
|
-
|
|
207
|
-
<summary>OpenCode</summary>
|
|
139
|
+
Examples:
|
|
208
140
|
|
|
209
141
|
```json
|
|
210
142
|
{
|
|
211
|
-
"
|
|
212
|
-
"mcp": {
|
|
213
|
-
"aai-gateway": {
|
|
214
|
-
"type": "local",
|
|
215
|
-
"command": ["npx", "aai-gateway"],
|
|
216
|
-
"enabled": true
|
|
217
|
-
}
|
|
218
|
-
}
|
|
143
|
+
"path": "/absolute/path/to/skill"
|
|
219
144
|
}
|
|
220
145
|
```
|
|
221
146
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
| Option | Description |
|
|
229
|
-
| ----------- | ----------------------------------------------- |
|
|
230
|
-
| `--dev` | Development mode, scans Xcode build directories |
|
|
231
|
-
| `--scan` | Scan for AAI-enabled apps and exit |
|
|
232
|
-
| `--version` | Show version |
|
|
233
|
-
| `--help` | Show help |
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
## Appendix
|
|
238
|
-
|
|
239
|
-
### How to Integrate
|
|
240
|
-
|
|
241
|
-
There are two ways to integrate an app with AAI Gateway today:
|
|
242
|
-
|
|
243
|
-
#### Method 1: Provide a Descriptor File
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"url": "https://example.com/skill"
|
|
150
|
+
}
|
|
151
|
+
```
|
|
244
152
|
|
|
245
|
-
|
|
153
|
+
Just like MCP import, skill import returns:
|
|
246
154
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
| **Windows** | `<App>.exe directory/aai.json` |
|
|
252
|
-
| **Linux** | `/usr/share/<app>/aai.json` |
|
|
155
|
+
- the generated app id
|
|
156
|
+
- generated `keywords`
|
|
157
|
+
- generated `summary`
|
|
158
|
+
- the guide tool name: `app:<id>`
|
|
253
159
|
|
|
254
|
-
|
|
160
|
+
Then restart your AI tool before using the imported skill.
|
|
255
161
|
|
|
256
|
-
|
|
162
|
+
### 4. Supported ACP Agents
|
|
257
163
|
|
|
258
|
-
|
|
164
|
+
AAI Gateway can also control app-like agents through ACP.
|
|
259
165
|
|
|
260
|
-
|
|
261
|
-
- **ACP Agent**: Create `src/discovery/descriptors/<agent>-agent.ts`, register in `src/discovery/agent-registry.ts`
|
|
166
|
+
Currently supported ACP agent types:
|
|
262
167
|
|
|
263
|
-
|
|
168
|
+
- OpenCode
|
|
169
|
+
- Claude Code
|
|
170
|
+
- Codex
|
|
264
171
|
|
|
265
|
-
|
|
172
|
+
## App Auto Discovery
|
|
266
173
|
|
|
267
|
-
|
|
174
|
+
AAI Gateway discovers apps from four places:
|
|
268
175
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
| `appCredential` | Enterprise apps | Dialog for App ID + Secret |
|
|
274
|
-
| `cookie` | No official API | Manual cookie extraction |
|
|
176
|
+
- desktop descriptors
|
|
177
|
+
- web descriptors
|
|
178
|
+
- gateway-managed imports
|
|
179
|
+
- built-in ACP agent descriptors
|
|
275
180
|
|
|
276
|
-
|
|
181
|
+
### The AAI Descriptor
|
|
277
182
|
|
|
278
|
-
|
|
279
|
-
| ----------- | ---------------------- | ---------------- | -------------- | --------- |
|
|
280
|
-
| **macOS** | Supported | Apple Events | osascript | Keychain |
|
|
281
|
-
| **Linux** | XDG paths | DBus (gdbus) | zenity/kdialog | libsecret |
|
|
282
|
-
| **Windows** | Program Files | COM (PowerShell) | PowerShell | CredMan |
|
|
283
|
-
| **Web** | `.well-known/aai.json` | HTTP | N/A | Platform |
|
|
284
|
-
| **Stdio** | Protocol only | Planned | N/A | N/A |
|
|
183
|
+
The descriptor is a small `aai.json` file. It tells AAI Gateway:
|
|
285
184
|
|
|
286
|
-
|
|
185
|
+
- what the app is
|
|
186
|
+
- how to connect to it
|
|
187
|
+
- how to expose it at low context cost
|
|
287
188
|
|
|
288
|
-
|
|
189
|
+
Minimal example:
|
|
289
190
|
|
|
290
|
-
|
|
291
|
-
|
|
191
|
+
```json
|
|
192
|
+
{
|
|
193
|
+
"schemaVersion": "2.0",
|
|
194
|
+
"version": "1.0.0",
|
|
195
|
+
"app": {
|
|
196
|
+
"name": {
|
|
197
|
+
"default": "Example App"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"access": {
|
|
201
|
+
"protocol": "cli",
|
|
202
|
+
"config": {
|
|
203
|
+
"command": "example-app"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"exposure": {
|
|
207
|
+
"keywords": ["example", "utility"],
|
|
208
|
+
"summary": "Use this app when the user wants to work with Example App."
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
292
212
|
|
|
293
|
-
|
|
294
|
-
# Check current policy
|
|
295
|
-
Get-ExecutionPolicy
|
|
213
|
+
Supported `access.protocol` values today:
|
|
296
214
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
215
|
+
- `mcp`
|
|
216
|
+
- `skill`
|
|
217
|
+
- `acp-agent`
|
|
218
|
+
- `cli`
|
|
300
219
|
|
|
301
|
-
|
|
220
|
+
### Where To Put `aai.json`
|
|
302
221
|
|
|
303
|
-
####
|
|
222
|
+
#### Web Apps
|
|
304
223
|
|
|
305
|
-
|
|
306
|
-
- **Dialog Tools**: Install one of the following:
|
|
224
|
+
Publish it at:
|
|
307
225
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
226
|
+
```text
|
|
227
|
+
https://<your-host>/.well-known/aai.json
|
|
228
|
+
```
|
|
311
229
|
|
|
312
|
-
|
|
313
|
-
sudo dnf install zenity # or kdialog
|
|
230
|
+
AAI Gateway fetches that path when the user calls `remote:discover`.
|
|
314
231
|
|
|
315
|
-
|
|
316
|
-
sudo pacman -S zenity # or kdialog
|
|
317
|
-
```
|
|
232
|
+
#### macOS Apps
|
|
318
233
|
|
|
319
|
-
|
|
234
|
+
Recommended locations scanned by the gateway:
|
|
320
235
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
236
|
+
- `<YourApp>.app/Contents/Resources/aai.json`
|
|
237
|
+
- `~/Library/Containers/<container>/Data/Library/Application Support/aai.json`
|
|
238
|
+
- `~/Library/Containers/<container>/Data/Library/Application Support/aai-gateway/aai.json`
|
|
324
239
|
|
|
325
|
-
|
|
326
|
-
sudo dnf install libsecret
|
|
327
|
-
```
|
|
240
|
+
#### Linux Apps
|
|
328
241
|
|
|
329
|
-
|
|
242
|
+
The gateway scans for `aai.json` under:
|
|
330
243
|
|
|
331
|
-
|
|
244
|
+
- `/usr/share`
|
|
245
|
+
- `/usr/local/share`
|
|
246
|
+
- `~/.local/share`
|
|
332
247
|
|
|
333
|
-
|
|
248
|
+
#### Windows Apps
|
|
334
249
|
|
|
335
|
-
|
|
250
|
+
The gateway scans for `aai.json` under:
|
|
336
251
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
| **Linear** | API Key | `api.linear.app` | Modern project management |
|
|
341
|
-
| **Stripe** | API Key | `api.stripe.com` | Payment processing |
|
|
342
|
-
| **Slack** | OAuth2 / Bot Token | `slack.com/api` | Team messaging and channels |
|
|
343
|
-
| **Jira** | OAuth2 / API Token | `api.atlassian.com` | Issue and project tracking |
|
|
344
|
-
| **Gitee** | API Key | `gitee.com/api/v5` | Code hosting (China) |
|
|
252
|
+
- `C:\Program Files`
|
|
253
|
+
- `C:\Program Files (x86)`
|
|
254
|
+
- `%LOCALAPPDATA%`
|
|
345
255
|
|
|
346
|
-
|
|
256
|
+
### Descriptor Guidelines
|
|
347
257
|
|
|
348
|
-
|
|
349
|
-
| -------------------- | ------------------ | ----------------------------- | ---------------------------- |
|
|
350
|
-
| **Google Drive** | OAuth2 | `www.googleapis.com/drive` | Cloud storage and files |
|
|
351
|
-
| **Google Calendar** | OAuth2 | `www.googleapis.com/calendar` | Calendar and scheduling |
|
|
352
|
-
| **Airtable** | API Key / OAuth2 | `api.airtable.com` | Database and spreadsheets |
|
|
353
|
-
| **Trello** | API Key + Token | `api.trello.com/1` | Kanban boards |
|
|
354
|
-
| **Asana** | API Key / OAuth2 | `app.asana.com/api/1.0` | Project management |
|
|
355
|
-
| **Discord** | Bot Token / OAuth2 | `discord.com/api/v10` | Community messaging |
|
|
356
|
-
| **GitLab** | API Key / OAuth2 | `gitlab.com/api/v4` | DevOps platform |
|
|
357
|
-
| **DingTalk (钉钉)** | App Credential | `api.dingtalk.com/v1.0` | Enterprise messaging (China) |
|
|
358
|
-
| **WeCom (企业微信)** | App Credential | `qyapi.weixin.qq.com/cgi-bin` | Enterprise WeChat (China) |
|
|
258
|
+
Keep descriptors small and practical:
|
|
359
259
|
|
|
360
|
-
|
|
260
|
+
- make `app.name.default` clear
|
|
261
|
+
- keep `keywords` short and high-signal
|
|
262
|
+
- make `summary` explain when the app should be used
|
|
263
|
+
- put detailed capability data in the downstream protocol, not in the descriptor
|
|
361
264
|
|
|
362
|
-
|
|
265
|
+
If your app already speaks MCP, keep the descriptor minimal and let MCP provide tool detail lazily.
|
|
363
266
|
|
|
364
|
-
|
|
365
|
-
| ---------- | ---------------- | ------------------------ |
|
|
366
|
-
| Monday.com | API Key | Work management platform |
|
|
367
|
-
| ClickUp | API Key | Productivity platform |
|
|
368
|
-
| Basecamp | OAuth2 | Project collaboration |
|
|
369
|
-
| Bitbucket | API Key / OAuth2 | Git repository hosting |
|
|
267
|
+
## Submit A Pull Request To Preload A Descriptor
|
|
370
268
|
|
|
371
|
-
|
|
269
|
+
If you want AAI Gateway to ship with a descriptor by default, open a PR.
|
|
372
270
|
|
|
373
|
-
|
|
374
|
-
| ----------------- | ----------------------- | -------------------------- |
|
|
375
|
-
| Gmail | OAuth2 | Email by Google |
|
|
376
|
-
| Microsoft Outlook | OAuth2 | Email by Microsoft |
|
|
377
|
-
| SendGrid | API Key | Email delivery service |
|
|
378
|
-
| Mailgun | API Key | Email API service |
|
|
379
|
-
| Twilio | API Key | SMS and voice API |
|
|
380
|
-
| Tencent Meeting | OAuth2 / App Credential | Video conferencing (China) |
|
|
271
|
+
What to include:
|
|
381
272
|
|
|
382
|
-
|
|
273
|
+
- the descriptor itself
|
|
274
|
+
- a safe discovery rule that proves the app is actually installed
|
|
275
|
+
- the connection config
|
|
276
|
+
- a short explanation of why the integration should be bundled
|
|
383
277
|
|
|
384
|
-
|
|
385
|
-
| ------------- | --------- | --------------------- |
|
|
386
|
-
| Supabase | API Key | Backend-as-a-Service |
|
|
387
|
-
| PlanetScale | API Key | Serverless MySQL |
|
|
388
|
-
| Neon | API Key | Serverless PostgreSQL |
|
|
389
|
-
| Aliyun Drive | OAuth2 | Cloud storage (China) |
|
|
390
|
-
| Baidu Netdisk | OAuth2 | Cloud storage (China) |
|
|
278
|
+
Today, built-in ACP agent descriptors live in:
|
|
391
279
|
|
|
392
|
-
|
|
280
|
+
- `src/discovery/descriptors/`
|
|
393
281
|
|
|
394
|
-
|
|
395
|
-
| ---------- | -------------- | ------------------------ |
|
|
396
|
-
| PayPal | OAuth2 | Payment platform |
|
|
397
|
-
| Square | API Key | Payment processing |
|
|
398
|
-
| Shopify | API Key | E-commerce platform |
|
|
399
|
-
| WeChat Pay | App Credential | Payment platform (China) |
|
|
282
|
+
And they are registered in:
|
|
400
283
|
|
|
401
|
-
|
|
284
|
+
- `src/discovery/agent-registry.ts`
|
|
402
285
|
|
|
403
|
-
|
|
404
|
-
| ------------ | --------- | ----------------------------- | ---------------------- |
|
|
405
|
-
| Brave Search | API Key | `api.search.brave.com/res/v1` | Privacy-focused search |
|
|
406
|
-
| Perplexity | API Key | `api.perplexity.ai` | AI search engine |
|
|
407
|
-
| Exa | API Key | `api.exa.ai` | AI-powered search |
|
|
408
|
-
| Tavily | API Key | `api.tavily.com` | Search API for AI |
|
|
286
|
+
For a typical PR:
|
|
409
287
|
|
|
410
|
-
|
|
288
|
+
1. Add the descriptor file.
|
|
289
|
+
2. Add or update discovery checks.
|
|
290
|
+
3. Register it in the appropriate discovery source.
|
|
291
|
+
4. Update the README if the new integration is user-facing.
|
|
411
292
|
|
|
412
|
-
|
|
293
|
+
If you are unsure whether an integration should be bundled, open an issue first.
|
|
413
294
|
|
|
414
|
-
|
|
415
|
-
- [Report Issues](https://github.com/gybob/aai-gateway/issues) - Bug reports and feature requests
|
|
295
|
+
## Disclaimer
|
|
416
296
|
|
|
417
|
-
|
|
297
|
+
AAI Gateway is still under active development.
|
|
418
298
|
|
|
419
|
-
|
|
299
|
+
You should expect rough edges, missing pieces, and bugs.
|
|
420
300
|
|
|
421
|
-
|
|
301
|
+
Contributions are welcome.
|