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 CHANGED
@@ -1,421 +1,301 @@
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 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
- | 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** |
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
- ## Architecture
19
+ ### 1. Connect Your AI Tool To AAI Gateway
25
20
 
26
- ![AAI Gateway Architecture](./images/architecture.png)
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
- ## 🚀 Core Innovations
25
+ ### Claude Code
31
26
 
32
- Traditional MCP servers return all tools on `tools/list`, causing:
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
- ### 2. Unified Descriptor
33
+ ### Codex
59
34
 
60
- Every integration is normalized through the same `aai.json` descriptor model. At a high level, the descriptor defines:
35
+ Official docs: <https://developers.openai.com/learn/docs-mcp>
61
36
 
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
- ---
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
- ### Desktop App Workflow
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
- ### ACP Agent Workflow
45
+ Add this to `~/.config/opencode/opencode.json` or your project `opencode.json`:
100
46
 
101
- ```
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
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
- ## 🔐 Security & Consent
60
+ ### What You Get After Connecting
113
61
 
114
- AAI Gateway implements a **caller-aware consent mechanism** to protect user privacy and control:
62
+ Once connected, your AI tool can use AAI Gateway tools such as:
115
63
 
116
- ### Per-Caller Authorization
64
+ - `remote:discover`
65
+ - `aai:exec`
66
+ - `mcp:import`
67
+ - `skill:import`
68
+ - `mcp:refresh`
69
+ - `import:config`
117
70
 
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
71
+ ### 2. Import An MCP Server
122
72
 
123
- ### Consent Flow
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
- ## 📱 Supported Apps
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
- These apps have built-in descriptors and work out of the box:
81
+ AAI Gateway keeps the import parameters close to normal MCP config shapes:
143
82
 
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 |
83
+ - stdio MCP: `command`, `args`, `env`, `cwd`
84
+ - remote MCP: `url`, optional `transport`, optional `headers`
152
85
 
153
- > 💡 Want to add your app? See [How to Integrate](#how-to-integrate) | [Upcoming Apps](#upcoming-apps)
86
+ Before import, the AI tool should ask you to choose:
154
87
 
155
- > ⚠️ **Note**: AAI Gateway is currently in active development. Bugs may exist. Contributions are welcome!
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
- "mcpServers": {
166
- "aai-gateway": {
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
- <details>
175
- <summary>Claude Code</summary>
100
+ Example: import a normal remote Streamable HTTP MCP config
176
101
 
177
- ```bash
178
- claude mcp add aai-gateway npx aai-gateway
102
+ ```json
103
+ {
104
+ "url": "https://example.com/mcp"
105
+ }
179
106
  ```
180
107
 
181
- </details>
108
+ Example: import a normal remote SSE MCP config
182
109
 
183
- <details>
184
- <summary>Claude Desktop</summary>
110
+ ```json
111
+ {
112
+ "url": "https://example.com/sse",
113
+ "transport": "sse"
114
+ }
115
+ ```
185
116
 
186
- Follow the [MCP installation guide](https://modelcontextprotocol.io/quickstart/user). Config: `~/Library/Application Support/Claude/claude_desktop_config.json`
117
+ After import, AAI Gateway returns:
187
118
 
188
- </details>
119
+ - the generated app id
120
+ - the generated `keywords`
121
+ - the generated `summary`
122
+ - the guide tool name: `app:<id>`
189
123
 
190
- <details>
191
- <summary>Copilot / VS Code</summary>
124
+ Important:
192
125
 
193
- ```bash
194
- code --add-mcp '{"name":"aai-gateway","command":"npx","args":["aai-gateway"]}'
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
- </details>
130
+ ### 3. Import A Skill
198
131
 
199
- <details>
200
- <summary>Cursor</summary>
132
+ Skills are imported through the AI tool as well.
201
133
 
202
- `Cursor Settings` `MCP` `Add new MCP Server`. Name: `aai-gateway`, Type: `command`, Command: `npx aai-gateway`
134
+ Ask the AI tool to call `skill:import`, then give it either:
203
135
 
204
- </details>
136
+ - a local skill path
137
+ - a remote skill root URL that exposes `SKILL.md`
205
138
 
206
- <details>
207
- <summary>OpenCode</summary>
139
+ Examples:
208
140
 
209
141
  ```json
210
142
  {
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
- }
143
+ "path": "/absolute/path/to/skill"
219
144
  }
220
145
  ```
221
146
 
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
147
+ ```json
148
+ {
149
+ "url": "https://example.com/skill"
150
+ }
151
+ ```
244
152
 
245
- Place an `aai.json` descriptor at the standard location:
153
+ Just like MCP import, skill import returns:
246
154
 
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` |
155
+ - the generated app id
156
+ - generated `keywords`
157
+ - generated `summary`
158
+ - the guide tool name: `app:<id>`
253
159
 
254
- AAI Gateway will automatically discover and load the descriptor.
160
+ Then restart your AI tool before using the imported skill.
255
161
 
256
- #### Method 2: Contribute to Built-in Registry
162
+ ### 4. Supported ACP Agents
257
163
 
258
- For apps without a hosted descriptor, you can add a built-in descriptor:
164
+ AAI Gateway can also control app-like agents through ACP.
259
165
 
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`
166
+ Currently supported ACP agent types:
262
167
 
263
- Then submit a pull request.
168
+ - OpenCode
169
+ - Claude Code
170
+ - Codex
264
171
 
265
- > **Note**: ACP agents are auto-discovered by checking if the CLI command exists on the system.
172
+ ## App Auto Discovery
266
173
 
267
- #### Supported Auth Types
174
+ AAI Gateway discovers apps from four places:
268
175
 
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 |
176
+ - desktop descriptors
177
+ - web descriptors
178
+ - gateway-managed imports
179
+ - built-in ACP agent descriptors
275
180
 
276
- #### Platform Support
181
+ ### The AAI Descriptor
277
182
 
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 |
183
+ The descriptor is a small `aai.json` file. It tells AAI Gateway:
285
184
 
286
- > **Note**: Linux and Windows implementations are functional but may require additional testing and refinement. Contributions are welcome!
185
+ - what the app is
186
+ - how to connect to it
187
+ - how to expose it at low context cost
287
188
 
288
- #### Windows Requirements
189
+ Minimal example:
289
190
 
290
- - **PowerShell 5.1+** (comes with Windows 10+)
291
- - **Execution Policy**: Must allow script execution
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
- ```powershell
294
- # Check current policy
295
- Get-ExecutionPolicy
213
+ Supported `access.protocol` values today:
296
214
 
297
- # Set to allow local scripts (recommended)
298
- Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
299
- ```
215
+ - `mcp`
216
+ - `skill`
217
+ - `acp-agent`
218
+ - `cli`
300
219
 
301
- - **Credential Manager**: Built-in Windows feature, no additional setup needed
220
+ ### Where To Put `aai.json`
302
221
 
303
- #### Linux Requirements
222
+ #### Web Apps
304
223
 
305
- - **DBus**: Usually pre-installed on modern Linux distributions
306
- - **Dialog Tools**: Install one of the following:
224
+ Publish it at:
307
225
 
308
- ```bash
309
- # Ubuntu/Debian
310
- sudo apt install zenity # or kdialog
226
+ ```text
227
+ https://<your-host>/.well-known/aai.json
228
+ ```
311
229
 
312
- # Fedora
313
- sudo dnf install zenity # or kdialog
230
+ AAI Gateway fetches that path when the user calls `remote:discover`.
314
231
 
315
- # Arch Linux
316
- sudo pacman -S zenity # or kdialog
317
- ```
232
+ #### macOS Apps
318
233
 
319
- - **libsecret**: For secure credential storage
234
+ Recommended locations scanned by the gateway:
320
235
 
321
- ```bash
322
- # Ubuntu/Debian
323
- sudo apt install libsecret-tools
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
- # Fedora
326
- sudo dnf install libsecret
327
- ```
240
+ #### Linux Apps
328
241
 
329
- ---
242
+ The gateway scans for `aai.json` under:
330
243
 
331
- ### Upcoming Apps
244
+ - `/usr/share`
245
+ - `/usr/local/share`
246
+ - `~/.local/share`
332
247
 
333
- The following apps are planned for future integration, organized by priority:
248
+ #### Windows Apps
334
249
 
335
- #### 🚀 Priority P0 - High Activity + Simple Integration
250
+ The gateway scans for `aai.json` under:
336
251
 
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) |
252
+ - `C:\Program Files`
253
+ - `C:\Program Files (x86)`
254
+ - `%LOCALAPPDATA%`
345
255
 
346
- #### 🔥 Priority P1 - High Activity
256
+ ### Descriptor Guidelines
347
257
 
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) |
258
+ Keep descriptors small and practical:
359
259
 
360
- #### 📈 Priority P2 - Medium Activity
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
- **Project Management & Collaboration:**
265
+ If your app already speaks MCP, keep the descriptor minimal and let MCP provide tool detail lazily.
363
266
 
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 |
267
+ ## Submit A Pull Request To Preload A Descriptor
370
268
 
371
- **Communication & Email:**
269
+ If you want AAI Gateway to ship with a descriptor by default, open a PR.
372
270
 
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) |
271
+ What to include:
381
272
 
382
- **Data & Storage:**
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
- | 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) |
278
+ Today, built-in ACP agent descriptors live in:
391
279
 
392
- **Payments & Commerce:**
280
+ - `src/discovery/descriptors/`
393
281
 
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) |
282
+ And they are registered in:
400
283
 
401
- #### 🔍 Priority P3 - Search & AI
284
+ - `src/discovery/agent-registry.ts`
402
285
 
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 |
286
+ For a typical PR:
409
287
 
410
- Want to see your app prioritized? [Open an issue](https://github.com/gybob/aai-gateway/issues).
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
- ## Links
293
+ If you are unsure whether an integration should be bundled, open an issue first.
413
294
 
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
295
+ ## Disclaimer
416
296
 
417
- ---
297
+ AAI Gateway is still under active development.
418
298
 
419
- ## License
299
+ You should expect rough edges, missing pieces, and bugs.
420
300
 
421
- Apache-2.0
301
+ Contributions are welcome.