aai-gateway 0.3.5 → 0.4.2
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 +195 -305
- package/dist/cli.js +372 -83
- package/dist/cli.js.map +1 -1
- package/dist/index.js +471 -18
- package/dist/index.js.map +1 -1
- package/dist/server-TmWCZmyU.js +14678 -0
- package/dist/server-TmWCZmyU.js.map +1 -0
- package/package.json +23 -11
- package/dist/server-DrBOLU_J.js +0 -11114
- package/dist/server-DrBOLU_J.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,421 +1,311 @@
|
|
|
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 through progressive disclosure — AAI Gateway never exposes raw tool definitions upfront
|
|
14
13
|
|
|
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** |
|
|
14
|
+
**App-level exposure, not tool-level.** Tools are grouped into apps and only the app interface is visible initially. Users interact through `app:<id>` guides instead of seeing dozens of individual tools.
|
|
21
15
|
|
|
22
|
-
|
|
16
|
+
**Two app interfaces, user chooses:**
|
|
23
17
|
|
|
24
|
-
|
|
18
|
+
- `summary` — a natural language description; good for automatic triggering
|
|
19
|
+
- `keywords` — a compact keyword set; further reduces context overhead when users reference tools explicitly
|
|
25
20
|
|
|
26
|
-
|
|
21
|
+
Both modes keep the full tool capability available downstream — it just stays hidden until actually needed.
|
|
27
22
|
|
|
28
|
-
|
|
23
|
+
- A cleaner path to mix MCP servers, skills, ACP agents, and CLI-backed apps
|
|
29
24
|
|
|
30
|
-
|
|
25
|
+
AAI Gateway is for one goal: make tool ecosystems feel smaller, sharper, and easier for agents to use.
|
|
31
26
|
|
|
32
|
-
|
|
27
|
+
## How To Use
|
|
33
28
|
|
|
34
|
-
|
|
35
|
-
50 apps × 20 tools per app = 1000+ tool entries
|
|
36
|
-
→ Context window explosion
|
|
37
|
-
→ Agent performance degradation
|
|
38
|
-
→ Reduced response accuracy
|
|
39
|
-
```
|
|
29
|
+
### 1. Connect Your AI Tool To AAI Gateway
|
|
40
30
|
|
|
41
|
-
|
|
31
|
+
You do not need to preinstall `aai-gateway`.
|
|
42
32
|
|
|
43
|
-
|
|
33
|
+
Use the same style users already know from mainstream MCP setups: launch it through `npx`.
|
|
44
34
|
|
|
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
|
|
35
|
+
### Claude Code
|
|
50
36
|
|
|
51
|
-
|
|
37
|
+
Official docs: <https://code.claude.com/docs/en/mcp>
|
|
52
38
|
|
|
53
|
-
|
|
39
|
+
```bash
|
|
40
|
+
claude mcp add --transport stdio aai-gateway -- npx -y aai-gateway
|
|
54
41
|
```
|
|
55
42
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### 2. Unified Descriptor
|
|
59
|
-
|
|
60
|
-
Every integration is normalized through the same `aai.json` descriptor model. At a high level, the descriptor defines:
|
|
61
|
-
|
|
62
|
-
- App identity and metadata
|
|
63
|
-
- Execution binding
|
|
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
|
-
---
|
|
43
|
+
### Codex
|
|
71
44
|
|
|
72
|
-
|
|
45
|
+
Official docs: <https://developers.openai.com/learn/docs-mcp>
|
|
73
46
|
|
|
74
|
-
|
|
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
|
|
47
|
+
```bash
|
|
48
|
+
codex mcp add aai-gateway -- npx -y aai-gateway
|
|
84
49
|
```
|
|
85
50
|
|
|
86
|
-
###
|
|
51
|
+
### OpenCode
|
|
87
52
|
|
|
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
|
-
```
|
|
53
|
+
Official docs: <https://opencode.ai/docs/config> and <https://opencode.ai/docs/mcp-servers/>
|
|
98
54
|
|
|
99
|
-
|
|
55
|
+
Add this to `~/.config/opencode/opencode.json` or your project `opencode.json`:
|
|
100
56
|
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"$schema": "https://opencode.ai/config.json",
|
|
60
|
+
"mcp": {
|
|
61
|
+
"aai-gateway": {
|
|
62
|
+
"type": "local",
|
|
63
|
+
"command": ["npx", "-y", "aai-gateway"],
|
|
64
|
+
"enabled": true
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
101
68
|
```
|
|
102
|
-
1. AAI Gateway scans for installed ACP agents at startup
|
|
103
|
-
→ Found agents appear as app:<agent-id> entries in tools/list
|
|
104
|
-
2. User: "Use OpenCode to refactor this code"
|
|
105
|
-
→ Agent finds matching app:dev.sst.opencode
|
|
106
|
-
3. tools/call("app:dev.sst.opencode")
|
|
107
|
-
→ Returns operation guide: session/new(), session/prompt(message)
|
|
108
|
-
4. tools/call("aai:exec", {app: "dev.sst.opencode", tool: "session/prompt", args: {message: "refactor this code"}})
|
|
109
|
-
→ Executes via ACP (stdio JSON-RPC) and returns result
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## 🔐 Security & Consent
|
|
113
|
-
|
|
114
|
-
AAI Gateway implements a **caller-aware consent mechanism** to protect user privacy and control:
|
|
115
69
|
|
|
116
|
-
###
|
|
70
|
+
### What You Get After Connecting
|
|
117
71
|
|
|
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
|
|
72
|
+
Once connected, your AI tool can use AAI Gateway tools such as:
|
|
122
73
|
|
|
123
|
-
|
|
74
|
+
- `remote:discover`
|
|
75
|
+
- `aai:exec`
|
|
76
|
+
- `mcp:import`
|
|
77
|
+
- `skill:import`
|
|
78
|
+
- `mcp:refresh`
|
|
79
|
+
- `import:config`
|
|
124
80
|
|
|
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
|
-
---
|
|
81
|
+
### 2. Import An MCP Server
|
|
139
82
|
|
|
140
|
-
|
|
83
|
+
The main workflow is: copy a mainstream MCP config snippet into your AI tool and ask it to import that server through AAI Gateway.
|
|
141
84
|
|
|
142
|
-
|
|
85
|
+
The AI tool should:
|
|
143
86
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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 |
|
|
87
|
+
1. read the MCP config you pasted
|
|
88
|
+
2. ask you to choose an exposure mode
|
|
89
|
+
3. call `mcp:import`
|
|
152
90
|
|
|
153
|
-
|
|
91
|
+
AAI Gateway keeps the import parameters close to normal MCP config shapes:
|
|
154
92
|
|
|
155
|
-
|
|
93
|
+
- stdio MCP: `command`, `args`, `env`, `cwd`
|
|
94
|
+
- remote MCP: `url`, optional `transport`, optional `headers`
|
|
156
95
|
|
|
157
|
-
|
|
96
|
+
Before import, the AI tool should ask you to choose:
|
|
158
97
|
|
|
159
|
-
|
|
98
|
+
- `summary`: easier automatic triggering
|
|
99
|
+
- `keywords`: leaves room for more tools, but usually needs more explicit keyword mentions
|
|
160
100
|
|
|
161
|
-
|
|
101
|
+
Example: import a normal stdio MCP config
|
|
162
102
|
|
|
163
103
|
```json
|
|
164
104
|
{
|
|
165
|
-
"
|
|
166
|
-
|
|
167
|
-
"command": "npx",
|
|
168
|
-
"args": ["aai-gateway"]
|
|
169
|
-
}
|
|
170
|
-
}
|
|
105
|
+
"command": "npx",
|
|
106
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
|
|
171
107
|
}
|
|
172
108
|
```
|
|
173
109
|
|
|
174
|
-
|
|
175
|
-
<summary>Claude Code</summary>
|
|
110
|
+
Example: import a normal remote Streamable HTTP MCP config
|
|
176
111
|
|
|
177
|
-
```
|
|
178
|
-
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"url": "https://example.com/mcp"
|
|
115
|
+
}
|
|
179
116
|
```
|
|
180
117
|
|
|
181
|
-
|
|
118
|
+
Example: import a normal remote SSE MCP config
|
|
182
119
|
|
|
183
|
-
|
|
184
|
-
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"url": "https://example.com/sse",
|
|
123
|
+
"transport": "sse"
|
|
124
|
+
}
|
|
125
|
+
```
|
|
185
126
|
|
|
186
|
-
|
|
127
|
+
After import, AAI Gateway returns:
|
|
187
128
|
|
|
188
|
-
|
|
129
|
+
- the generated app id
|
|
130
|
+
- the generated `keywords`
|
|
131
|
+
- the generated `summary`
|
|
132
|
+
- the guide tool name: `app:<id>`
|
|
189
133
|
|
|
190
|
-
|
|
191
|
-
<summary>Copilot / VS Code</summary>
|
|
134
|
+
Important:
|
|
192
135
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
136
|
+
- Restart your AI tool before using the newly imported tool.
|
|
137
|
+
- After restart, the imported app will appear as `app:<id>`.
|
|
138
|
+
- Use `aai:exec` to actually run the imported app’s operations.
|
|
196
139
|
|
|
197
|
-
|
|
140
|
+
### 3. Import A Skill
|
|
198
141
|
|
|
199
|
-
|
|
200
|
-
<summary>Cursor</summary>
|
|
142
|
+
Skills are imported through the AI tool as well.
|
|
201
143
|
|
|
202
|
-
|
|
144
|
+
Ask the AI tool to call `skill:import`, then give it either:
|
|
203
145
|
|
|
204
|
-
|
|
146
|
+
- a local skill path
|
|
147
|
+
- a remote skill root URL that exposes `SKILL.md`
|
|
205
148
|
|
|
206
|
-
|
|
207
|
-
<summary>OpenCode</summary>
|
|
149
|
+
Examples:
|
|
208
150
|
|
|
209
151
|
```json
|
|
210
152
|
{
|
|
211
|
-
"
|
|
212
|
-
"mcp": {
|
|
213
|
-
"aai-gateway": {
|
|
214
|
-
"type": "local",
|
|
215
|
-
"command": ["npx", "aai-gateway"],
|
|
216
|
-
"enabled": true
|
|
217
|
-
}
|
|
218
|
-
}
|
|
153
|
+
"path": "/absolute/path/to/skill"
|
|
219
154
|
}
|
|
220
155
|
```
|
|
221
156
|
|
|
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
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"url": "https://example.com/skill"
|
|
160
|
+
}
|
|
161
|
+
```
|
|
244
162
|
|
|
245
|
-
|
|
163
|
+
Just like MCP import, skill import returns:
|
|
246
164
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
| **Windows** | `<App>.exe directory/aai.json` |
|
|
252
|
-
| **Linux** | `/usr/share/<app>/aai.json` |
|
|
165
|
+
- the generated app id
|
|
166
|
+
- generated `keywords`
|
|
167
|
+
- generated `summary`
|
|
168
|
+
- the guide tool name: `app:<id>`
|
|
253
169
|
|
|
254
|
-
|
|
170
|
+
Then restart your AI tool before using the imported skill.
|
|
255
171
|
|
|
256
|
-
|
|
172
|
+
### 4. Supported ACP Agents
|
|
257
173
|
|
|
258
|
-
|
|
174
|
+
AAI Gateway can also control app-like agents through ACP.
|
|
259
175
|
|
|
260
|
-
|
|
261
|
-
- **ACP Agent**: Create `src/discovery/descriptors/<agent>-agent.ts`, register in `src/discovery/agent-registry.ts`
|
|
176
|
+
Currently supported ACP agent types:
|
|
262
177
|
|
|
263
|
-
|
|
178
|
+
- OpenCode
|
|
179
|
+
- Claude Code
|
|
180
|
+
- Codex
|
|
264
181
|
|
|
265
|
-
|
|
182
|
+
## App Auto Discovery
|
|
266
183
|
|
|
267
|
-
|
|
184
|
+
AAI Gateway discovers apps from four places:
|
|
268
185
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
| `appCredential` | Enterprise apps | Dialog for App ID + Secret |
|
|
274
|
-
| `cookie` | No official API | Manual cookie extraction |
|
|
186
|
+
- desktop descriptors
|
|
187
|
+
- web descriptors
|
|
188
|
+
- gateway-managed imports
|
|
189
|
+
- built-in ACP agent descriptors
|
|
275
190
|
|
|
276
|
-
|
|
191
|
+
### The AAI Descriptor
|
|
277
192
|
|
|
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 |
|
|
193
|
+
The descriptor is a small `aai.json` file. It tells AAI Gateway:
|
|
285
194
|
|
|
286
|
-
|
|
195
|
+
- what the app is
|
|
196
|
+
- how to connect to it
|
|
197
|
+
- how to expose it at low context cost
|
|
287
198
|
|
|
288
|
-
|
|
199
|
+
Minimal example:
|
|
289
200
|
|
|
290
|
-
|
|
291
|
-
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"schemaVersion": "2.0",
|
|
204
|
+
"version": "1.0.0",
|
|
205
|
+
"app": {
|
|
206
|
+
"name": {
|
|
207
|
+
"default": "Example App"
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"access": {
|
|
211
|
+
"protocol": "cli",
|
|
212
|
+
"config": {
|
|
213
|
+
"command": "example-app"
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"exposure": {
|
|
217
|
+
"keywords": ["example", "utility"],
|
|
218
|
+
"summary": "Use this app when the user wants to work with Example App."
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
292
222
|
|
|
293
|
-
|
|
294
|
-
# Check current policy
|
|
295
|
-
Get-ExecutionPolicy
|
|
223
|
+
Supported `access.protocol` values today:
|
|
296
224
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
225
|
+
- `mcp`
|
|
226
|
+
- `skill`
|
|
227
|
+
- `acp-agent`
|
|
228
|
+
- `cli`
|
|
300
229
|
|
|
301
|
-
|
|
230
|
+
### Where To Put `aai.json`
|
|
302
231
|
|
|
303
|
-
####
|
|
232
|
+
#### Web Apps
|
|
304
233
|
|
|
305
|
-
|
|
306
|
-
- **Dialog Tools**: Install one of the following:
|
|
234
|
+
Publish it at:
|
|
307
235
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
236
|
+
```text
|
|
237
|
+
https://<your-host>/.well-known/aai.json
|
|
238
|
+
```
|
|
311
239
|
|
|
312
|
-
|
|
313
|
-
sudo dnf install zenity # or kdialog
|
|
240
|
+
AAI Gateway fetches that path when the user calls `remote:discover`.
|
|
314
241
|
|
|
315
|
-
|
|
316
|
-
sudo pacman -S zenity # or kdialog
|
|
317
|
-
```
|
|
242
|
+
#### macOS Apps
|
|
318
243
|
|
|
319
|
-
|
|
244
|
+
Recommended locations scanned by the gateway:
|
|
320
245
|
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
246
|
+
- `<YourApp>.app/Contents/Resources/aai.json`
|
|
247
|
+
- `~/Library/Containers/<container>/Data/Library/Application Support/aai.json`
|
|
248
|
+
- `~/Library/Containers/<container>/Data/Library/Application Support/aai-gateway/aai.json`
|
|
324
249
|
|
|
325
|
-
|
|
326
|
-
sudo dnf install libsecret
|
|
327
|
-
```
|
|
250
|
+
#### Linux Apps
|
|
328
251
|
|
|
329
|
-
|
|
252
|
+
The gateway scans for `aai.json` under:
|
|
330
253
|
|
|
331
|
-
|
|
254
|
+
- `/usr/share`
|
|
255
|
+
- `/usr/local/share`
|
|
256
|
+
- `~/.local/share`
|
|
332
257
|
|
|
333
|
-
|
|
258
|
+
#### Windows Apps
|
|
334
259
|
|
|
335
|
-
|
|
260
|
+
The gateway scans for `aai.json` under:
|
|
336
261
|
|
|
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) |
|
|
262
|
+
- `C:\Program Files`
|
|
263
|
+
- `C:\Program Files (x86)`
|
|
264
|
+
- `%LOCALAPPDATA%`
|
|
345
265
|
|
|
346
|
-
|
|
266
|
+
### Descriptor Guidelines
|
|
347
267
|
|
|
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) |
|
|
268
|
+
Keep descriptors small and practical:
|
|
359
269
|
|
|
360
|
-
|
|
270
|
+
- make `app.name.default` clear
|
|
271
|
+
- keep `keywords` short and high-signal
|
|
272
|
+
- make `summary` explain when the app should be used
|
|
273
|
+
- put detailed capability data in the downstream protocol, not in the descriptor
|
|
361
274
|
|
|
362
|
-
|
|
275
|
+
If your app already speaks MCP, keep the descriptor minimal and let MCP provide tool detail lazily.
|
|
363
276
|
|
|
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 |
|
|
277
|
+
## Submit A Pull Request To Preload A Descriptor
|
|
370
278
|
|
|
371
|
-
|
|
279
|
+
If you want AAI Gateway to ship with a descriptor by default, open a PR.
|
|
372
280
|
|
|
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) |
|
|
281
|
+
What to include:
|
|
381
282
|
|
|
382
|
-
|
|
283
|
+
- the descriptor itself
|
|
284
|
+
- a safe discovery rule that proves the app is actually installed
|
|
285
|
+
- the connection config
|
|
286
|
+
- a short explanation of why the integration should be bundled
|
|
383
287
|
|
|
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) |
|
|
288
|
+
Today, built-in ACP agent descriptors live in:
|
|
391
289
|
|
|
392
|
-
|
|
290
|
+
- `src/discovery/descriptors/`
|
|
393
291
|
|
|
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) |
|
|
292
|
+
And they are registered in:
|
|
400
293
|
|
|
401
|
-
|
|
294
|
+
- `src/discovery/agent-registry.ts`
|
|
402
295
|
|
|
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 |
|
|
296
|
+
For a typical PR:
|
|
409
297
|
|
|
410
|
-
|
|
298
|
+
1. Add the descriptor file.
|
|
299
|
+
2. Add or update discovery checks.
|
|
300
|
+
3. Register it in the appropriate discovery source.
|
|
301
|
+
4. Update the README if the new integration is user-facing.
|
|
411
302
|
|
|
412
|
-
|
|
303
|
+
If you are unsure whether an integration should be bundled, open an issue first.
|
|
413
304
|
|
|
414
|
-
|
|
415
|
-
- [Report Issues](https://github.com/gybob/aai-gateway/issues) - Bug reports and feature requests
|
|
305
|
+
## Disclaimer
|
|
416
306
|
|
|
417
|
-
|
|
307
|
+
AAI Gateway is still under active development.
|
|
418
308
|
|
|
419
|
-
|
|
309
|
+
You should expect rough edges, missing pieces, and bugs.
|
|
420
310
|
|
|
421
|
-
|
|
311
|
+
Contributions are welcome.
|