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 CHANGED
@@ -1,421 +1,311 @@
1
1
  # AAI Gateway
2
2
 
3
- ## One MCP. All Apps. Zero Code Changes.
3
+ ## One MCP. Many Apps. Less Context.
4
4
 
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.
5
+ AAI Gateway turns many apps, agents, skills, and MCP servers into one MCP server.
7
6
 
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)
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
- ## Why AAI Gateway?
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
- | 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** |
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
- ## Architecture
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
- ![AAI Gateway Architecture](./images/architecture.png)
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
- ## 🚀 Core Innovations
25
+ AAI Gateway is for one goal: make tool ecosystems feel smaller, sharper, and easier for agents to use.
31
26
 
32
- Traditional MCP servers return all tools on `tools/list`, causing:
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
- ### 1. Progressive Disclosure
31
+ You do not need to preinstall `aai-gateway`.
42
32
 
43
- AAI Gateway's solution:
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
- = 50 apps + 2 tools = 52 entries ✅
37
+ Official docs: <https://code.claude.com/docs/en/mcp>
52
38
 
53
- Agent calls web:discover or app:<id> on-demand to get detailed operation guides
39
+ ```bash
40
+ claude mcp add --transport stdio aai-gateway -- npx -y aai-gateway
54
41
  ```
55
42
 
56
- **Result**: **95% reduction** in context usage, faster and more accurate Agent responses.
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
- ## How It Works
45
+ Official docs: <https://developers.openai.com/learn/docs-mcp>
73
46
 
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
47
+ ```bash
48
+ codex mcp add aai-gateway -- npx -y aai-gateway
84
49
  ```
85
50
 
86
- ### Desktop App Workflow
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
- ### ACP Agent Workflow
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
- ### Per-Caller Authorization
70
+ ### What You Get After Connecting
117
71
 
118
- - **Client Identification**: When an MCP client (Claude Desktop, Cursor, Windsurf, etc.) requests tool access, AAI Gateway identifies the caller from the MCP protocol metadata
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
- ### Consent Flow
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
- ## 📱 Supported Apps
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
- These apps have built-in descriptors and work out of the box:
85
+ The AI tool should:
143
86
 
144
- | App | Type | Auth Type | Tools | Description |
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 |
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
- > 💡 Want to add your app? See [How to Integrate](#how-to-integrate) | [Upcoming Apps](#upcoming-apps)
91
+ AAI Gateway keeps the import parameters close to normal MCP config shapes:
154
92
 
155
- > ⚠️ **Note**: AAI Gateway is currently in active development. Bugs may exist. Contributions are welcome!
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
- ## Installation
98
+ - `summary`: easier automatic triggering
99
+ - `keywords`: leaves room for more tools, but usually needs more explicit keyword mentions
160
100
 
161
- Add AAI Gateway to your MCP client configuration:
101
+ Example: import a normal stdio MCP config
162
102
 
163
103
  ```json
164
104
  {
165
- "mcpServers": {
166
- "aai-gateway": {
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
- <details>
175
- <summary>Claude Code</summary>
110
+ Example: import a normal remote Streamable HTTP MCP config
176
111
 
177
- ```bash
178
- claude mcp add aai-gateway npx aai-gateway
112
+ ```json
113
+ {
114
+ "url": "https://example.com/mcp"
115
+ }
179
116
  ```
180
117
 
181
- </details>
118
+ Example: import a normal remote SSE MCP config
182
119
 
183
- <details>
184
- <summary>Claude Desktop</summary>
120
+ ```json
121
+ {
122
+ "url": "https://example.com/sse",
123
+ "transport": "sse"
124
+ }
125
+ ```
185
126
 
186
- Follow the [MCP installation guide](https://modelcontextprotocol.io/quickstart/user). Config: `~/Library/Application Support/Claude/claude_desktop_config.json`
127
+ After import, AAI Gateway returns:
187
128
 
188
- </details>
129
+ - the generated app id
130
+ - the generated `keywords`
131
+ - the generated `summary`
132
+ - the guide tool name: `app:<id>`
189
133
 
190
- <details>
191
- <summary>Copilot / VS Code</summary>
134
+ Important:
192
135
 
193
- ```bash
194
- code --add-mcp '{"name":"aai-gateway","command":"npx","args":["aai-gateway"]}'
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
- </details>
140
+ ### 3. Import A Skill
198
141
 
199
- <details>
200
- <summary>Cursor</summary>
142
+ Skills are imported through the AI tool as well.
201
143
 
202
- `Cursor Settings` `MCP` `Add new MCP Server`. Name: `aai-gateway`, Type: `command`, Command: `npx aai-gateway`
144
+ Ask the AI tool to call `skill:import`, then give it either:
203
145
 
204
- </details>
146
+ - a local skill path
147
+ - a remote skill root URL that exposes `SKILL.md`
205
148
 
206
- <details>
207
- <summary>OpenCode</summary>
149
+ Examples:
208
150
 
209
151
  ```json
210
152
  {
211
- "$schema": "https://opencode.ai/config.json",
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
- </details>
223
-
224
- ---
225
-
226
- ## CLI Options
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
- Place an `aai.json` descriptor at the standard location:
163
+ Just like MCP import, skill import returns:
246
164
 
247
- | Platform | Location |
248
- | ----------- | -------------------------------------------- |
249
- | **Web** | `https://<your-domain>/.well-known/aai.json` |
250
- | **macOS** | `<App>.app/Contents/Resources/aai.json` |
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
- AAI Gateway will automatically discover and load the descriptor.
170
+ Then restart your AI tool before using the imported skill.
255
171
 
256
- #### Method 2: Contribute to Built-in Registry
172
+ ### 4. Supported ACP Agents
257
173
 
258
- For apps without a hosted descriptor, you can add a built-in descriptor:
174
+ AAI Gateway can also control app-like agents through ACP.
259
175
 
260
- - **Web App**: Create `src/discovery/descriptors/<app>.ts`, register in `src/discovery/web-registry.ts`
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
- Then submit a pull request.
178
+ - OpenCode
179
+ - Claude Code
180
+ - Codex
264
181
 
265
- > **Note**: ACP agents are auto-discovered by checking if the CLI command exists on the system.
182
+ ## App Auto Discovery
266
183
 
267
- #### Supported Auth Types
184
+ AAI Gateway discovers apps from four places:
268
185
 
269
- | Type | Use Case | User Flow |
270
- | --------------- | ------------------ | -------------------------- |
271
- | `oauth2` | User authorization | Browser OAuth 2.0 + PKCE |
272
- | `apiKey` | Static API tokens | Dialog prompts for token |
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
- #### Platform Support
191
+ ### The AAI Descriptor
277
192
 
278
- | Platform | Discovery | IPC | Consent | Storage |
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
- > **Note**: Linux and Windows implementations are functional but may require additional testing and refinement. Contributions are welcome!
195
+ - what the app is
196
+ - how to connect to it
197
+ - how to expose it at low context cost
287
198
 
288
- #### Windows Requirements
199
+ Minimal example:
289
200
 
290
- - **PowerShell 5.1+** (comes with Windows 10+)
291
- - **Execution Policy**: Must allow script execution
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
- ```powershell
294
- # Check current policy
295
- Get-ExecutionPolicy
223
+ Supported `access.protocol` values today:
296
224
 
297
- # Set to allow local scripts (recommended)
298
- Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
299
- ```
225
+ - `mcp`
226
+ - `skill`
227
+ - `acp-agent`
228
+ - `cli`
300
229
 
301
- - **Credential Manager**: Built-in Windows feature, no additional setup needed
230
+ ### Where To Put `aai.json`
302
231
 
303
- #### Linux Requirements
232
+ #### Web Apps
304
233
 
305
- - **DBus**: Usually pre-installed on modern Linux distributions
306
- - **Dialog Tools**: Install one of the following:
234
+ Publish it at:
307
235
 
308
- ```bash
309
- # Ubuntu/Debian
310
- sudo apt install zenity # or kdialog
236
+ ```text
237
+ https://<your-host>/.well-known/aai.json
238
+ ```
311
239
 
312
- # Fedora
313
- sudo dnf install zenity # or kdialog
240
+ AAI Gateway fetches that path when the user calls `remote:discover`.
314
241
 
315
- # Arch Linux
316
- sudo pacman -S zenity # or kdialog
317
- ```
242
+ #### macOS Apps
318
243
 
319
- - **libsecret**: For secure credential storage
244
+ Recommended locations scanned by the gateway:
320
245
 
321
- ```bash
322
- # Ubuntu/Debian
323
- sudo apt install libsecret-tools
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
- # Fedora
326
- sudo dnf install libsecret
327
- ```
250
+ #### Linux Apps
328
251
 
329
- ---
252
+ The gateway scans for `aai.json` under:
330
253
 
331
- ### Upcoming Apps
254
+ - `/usr/share`
255
+ - `/usr/local/share`
256
+ - `~/.local/share`
332
257
 
333
- The following apps are planned for future integration, organized by priority:
258
+ #### Windows Apps
334
259
 
335
- #### 🚀 Priority P0 - High Activity + Simple Integration
260
+ The gateway scans for `aai.json` under:
336
261
 
337
- | App | Auth Type | API Base | Description |
338
- | ---------- | ------------------ | ------------------- | --------------------------------------- |
339
- | **GitHub** | OAuth2 / API Key | `api.github.com` | Code hosting, repositories, issues, PRs |
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
- #### 🔥 Priority P1 - High Activity
266
+ ### Descriptor Guidelines
347
267
 
348
- | App | Auth Type | API Base | Description |
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
- #### 📈 Priority P2 - Medium Activity
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
- **Project Management & Collaboration:**
275
+ If your app already speaks MCP, keep the descriptor minimal and let MCP provide tool detail lazily.
363
276
 
364
- | App | Auth Type | Description |
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
- **Communication & Email:**
279
+ If you want AAI Gateway to ship with a descriptor by default, open a PR.
372
280
 
373
- | App | Auth Type | Description |
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
- **Data & Storage:**
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
- | App | Auth Type | Description |
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
- **Payments & Commerce:**
290
+ - `src/discovery/descriptors/`
393
291
 
394
- | App | Auth Type | Description |
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
- #### 🔍 Priority P3 - Search & AI
294
+ - `src/discovery/agent-registry.ts`
402
295
 
403
- | App | Auth Type | API Base | Description |
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
- Want to see your app prioritized? [Open an issue](https://github.com/gybob/aai-gateway/issues).
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
- ## Links
303
+ If you are unsure whether an integration should be bundled, open an issue first.
413
304
 
414
- - **[AAI Protocol Spec](https://github.com/gybob/aai-protocol)** - Protocol specification
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
- ## License
309
+ You should expect rough edges, missing pieces, and bugs.
420
310
 
421
- Apache-2.0
311
+ Contributions are welcome.