aai-gateway 0.3.4 → 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,407 +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
- ## 🚀 Core Innovation: Progressive Disclosure
19
+ ### 1. Connect Your AI Tool To AAI Gateway
25
20
 
26
- Traditional MCP servers return all tools on `tools/list`, causing:
21
+ You do not need to preinstall `aai-gateway`.
27
22
 
23
+ Use the same style users already know from mainstream MCP setups: launch it through `npx`.
24
+
25
+ ### Claude Code
26
+
27
+ Official docs: <https://code.claude.com/docs/en/mcp>
28
+
29
+ ```bash
30
+ claude mcp add --transport stdio aai-gateway -- npx -y aai-gateway
28
31
  ```
29
- 50 apps × 20 tools per app = 1000+ tool entries
30
- → Context window explosion
31
- → Agent performance degradation
32
- → Reduced response accuracy
33
- ```
34
32
 
35
- **AAI Gateway's Solution**:
33
+ ### Codex
34
+
35
+ Official docs: <https://developers.openai.com/learn/docs-mcp>
36
36
 
37
+ ```bash
38
+ codex mcp add aai-gateway -- npx -y aai-gateway
37
39
  ```
38
- tools/list returns only lightweight entries:
39
- ├── web:discover → Discover web apps and get their capabilities
40
- ├── app:<desktop-app-id> → Discovered desktop apps (one entry per app)
41
- └── aai:exec → Universal executor for all operations
42
40
 
43
- = 50 apps + 2 tools = 52 entries ✅
41
+ ### OpenCode
42
+
43
+ Official docs: <https://opencode.ai/docs/config> and <https://opencode.ai/docs/mcp-servers/>
44
44
 
45
- Agent calls web:discover or app:<id> on-demand to get detailed operation guides
45
+ Add this to `~/.config/opencode/opencode.json` or your project `opencode.json`:
46
+
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
+ }
46
58
  ```
47
59
 
48
- **Result**: **95% reduction** in context usage, faster and more accurate Agent responses.
60
+ ### What You Get After Connecting
49
61
 
50
- ---
62
+ Once connected, your AI tool can use AAI Gateway tools such as:
51
63
 
52
- ## How It Works
64
+ - `remote:discover`
65
+ - `aai:exec`
66
+ - `mcp:import`
67
+ - `skill:import`
68
+ - `mcp:refresh`
69
+ - `import:config`
53
70
 
54
- ### Web App Workflow
71
+ ### 2. Import An MCP Server
55
72
 
56
- ```
57
- 1. User: "Search my Notion workspace"
58
- 2. Agent recognizes "Notion" as a web application
59
- → Calls web:discover to fetch Notion's capabilities
60
- 3. tools/call("web:discover", {url: "notion.com"})
61
- → Returns operation guide: listDatabases(), queryDatabase(id), search(query)
62
- 4. tools/call("aai:exec", {app: "notion.com", tool: "search", args: {...}})
63
- → Executes and returns result
64
- ```
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.
65
74
 
66
- ### Desktop App Workflow
75
+ The AI tool should:
67
76
 
68
- ```
69
- 1. AAI Gateway scans system for AAI-enabled desktop apps
70
- Found apps appear as app:<id> entries in tools/list
71
- 2. User: "Show my work tasks"
72
- → Agent finds matching app:guanchen.worklens
73
- 3. tools/call("app:guanchen.worklens")
74
- → Returns operation guide: listTasks(), getTaskDetail(id), createTask()
75
- 4. tools/call("aai:exec", {app: "guanchen.worklens", tool: "listTasks", args: {}})
76
- → Executes and returns result
77
- ```
77
+ 1. read the MCP config you pasted
78
+ 2. ask you to choose an exposure mode
79
+ 3. call `mcp:import`
78
80
 
79
- ---
81
+ AAI Gateway keeps the import parameters close to normal MCP config shapes:
80
82
 
81
- ## 🔐 Security & Consent
83
+ - stdio MCP: `command`, `args`, `env`, `cwd`
84
+ - remote MCP: `url`, optional `transport`, optional `headers`
82
85
 
83
- AAI Gateway implements a **caller-aware consent mechanism** to protect user privacy and control:
86
+ Before import, the AI tool should ask you to choose:
84
87
 
85
- ### Per-Caller Authorization
88
+ - `summary`: easier automatic triggering
89
+ - `keywords`: leaves room for more tools, but usually needs more explicit keyword mentions
86
90
 
87
- - **Client Identification**: When an MCP client (Claude Desktop, Cursor, Windsurf, etc.) requests tool access, AAI Gateway identifies the caller from the MCP protocol metadata
88
- - **Isolated Consent**: Consent decisions are stored **per caller**, meaning authorization granted to Claude Desktop is NOT automatically granted to Cursor
89
- - **Clear Dialogs**: Consent dialogs clearly show which client is requesting access: "Claude Desktop wants to use: sendEmail"
90
- - **Re-authorization Required**: Different MCP clients must obtain their own authorization for the same tools
91
+ Example: import a normal stdio MCP config
91
92
 
92
- ### Consent Flow
93
+ ```json
94
+ {
95
+ "command": "npx",
96
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
97
+ }
98
+ ```
93
99
 
100
+ Example: import a normal remote Streamable HTTP MCP config
101
+
102
+ ```json
103
+ {
104
+ "url": "https://example.com/mcp"
105
+ }
94
106
  ```
95
- 1. MCP client (e.g., Cursor) calls a tool for the first time
96
- 2. AAI Gateway checks: Has Cursor been authorized for this tool?
97
- 3. If not → Show consent dialog: "Cursor wants to use: sendEmail"
98
- 4. User decision is stored with caller identity: consents["Cursor"]["com.example.mail"]["sendEmail"]
99
- 5. Next call from Cursor → No dialog (already authorized)
100
- 6. Claude Desktop calls same tool → Consent dialog shown (different caller)
107
+
108
+ Example: import a normal remote SSE MCP config
109
+
110
+ ```json
111
+ {
112
+ "url": "https://example.com/sse",
113
+ "transport": "sse"
114
+ }
101
115
  ```
102
116
 
103
- This ensures that each MCP client has explicit user authorization, preventing cross-client authorization leakage.
117
+ After import, AAI Gateway returns:
104
118
 
105
- > 💡 **Note**: Caller identity is informational and not a security boundary. The real security is enforced by the operating system (TCC on macOS, UAC on Windows, etc.).
106
- ---
119
+ - the generated app id
120
+ - the generated `keywords`
121
+ - the generated `summary`
122
+ - the guide tool name: `app:<id>`
107
123
 
108
- ## 📱 Supported Apps
124
+ Important:
109
125
 
110
- These apps have built-in descriptors and work out of the box:
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.
111
129
 
112
- | App | Auth Type | Tools | Description |
113
- | ----------------- | -------------- | ----- | --------------------------------------------------- |
114
- | **Notion** | API Key | 11 | Notes, docs, knowledge base, project management |
115
- | **Yuque (语雀)** | API Key | 7 | Alibaba Cloud knowledge management platform |
116
- | **Feishu / Lark** | App Credential | 11 | Enterprise collaboration (docs, wiki, IM, calendar) |
117
- > 💡 Want to add your app? See [How to Integrate](#how-to-integrate) | [Upcoming Apps](#upcoming-apps)
130
+ ### 3. Import A Skill
118
131
 
119
- > ⚠️ **Note**: AAI Gateway is currently in active development. Bugs may exist. Contributions are welcome!
132
+ Skills are imported through the AI tool as well.
120
133
 
121
- ---
134
+ Ask the AI tool to call `skill:import`, then give it either:
122
135
 
123
- ## Installation
136
+ - a local skill path
137
+ - a remote skill root URL that exposes `SKILL.md`
124
138
 
125
- Add AAI Gateway to your MCP client configuration:
139
+ Examples:
126
140
 
127
141
  ```json
128
142
  {
129
- "mcpServers": {
130
- "aai-gateway": {
131
- "command": "npx",
132
- "args": ["aai-gateway"]
133
- }
134
- }
143
+ "path": "/absolute/path/to/skill"
135
144
  }
136
145
  ```
137
146
 
138
- <details>
139
- <summary>Claude Code</summary>
140
-
141
- ```bash
142
- claude mcp add aai-gateway npx aai-gateway
147
+ ```json
148
+ {
149
+ "url": "https://example.com/skill"
150
+ }
143
151
  ```
144
152
 
145
- </details>
153
+ Just like MCP import, skill import returns:
146
154
 
147
- <details>
148
- <summary>Claude Desktop</summary>
155
+ - the generated app id
156
+ - generated `keywords`
157
+ - generated `summary`
158
+ - the guide tool name: `app:<id>`
149
159
 
150
- Follow the [MCP installation guide](https://modelcontextprotocol.io/quickstart/user). Config: `~/Library/Application Support/Claude/claude_desktop_config.json`
160
+ Then restart your AI tool before using the imported skill.
151
161
 
152
- </details>
162
+ ### 4. Supported ACP Agents
153
163
 
154
- <details>
155
- <summary>Copilot / VS Code</summary>
164
+ AAI Gateway can also control app-like agents through ACP.
156
165
 
157
- ```bash
158
- code --add-mcp '{"name":"aai-gateway","command":"npx","args":["aai-gateway"]}'
159
- ```
166
+ Currently supported ACP agent types:
167
+
168
+ - OpenCode
169
+ - Claude Code
170
+ - Codex
171
+
172
+ ## App Auto Discovery
173
+
174
+ AAI Gateway discovers apps from four places:
160
175
 
161
- </details>
176
+ - desktop descriptors
177
+ - web descriptors
178
+ - gateway-managed imports
179
+ - built-in ACP agent descriptors
162
180
 
163
- <details>
164
- <summary>Cursor</summary>
181
+ ### The AAI Descriptor
165
182
 
166
- `Cursor Settings` `MCP` `Add new MCP Server`. Name: `aai-gateway`, Type: `command`, Command: `npx aai-gateway`
183
+ The descriptor is a small `aai.json` file. It tells AAI Gateway:
167
184
 
168
- </details>
185
+ - what the app is
186
+ - how to connect to it
187
+ - how to expose it at low context cost
169
188
 
170
- <details>
171
- <summary>OpenCode</summary>
189
+ Minimal example:
172
190
 
173
191
  ```json
174
192
  {
175
- "$schema": "https://opencode.ai/config.json",
176
- "mcp": {
177
- "aai-gateway": {
178
- "type": "local",
179
- "command": ["npx", "aai-gateway"],
180
- "enabled": true
193
+ "schemaVersion": "2.0",
194
+ "version": "1.0.0",
195
+ "app": {
196
+ "name": {
197
+ "default": "Example App"
181
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."
182
209
  }
183
210
  }
184
211
  ```
185
212
 
186
- </details>
213
+ Supported `access.protocol` values today:
214
+
215
+ - `mcp`
216
+ - `skill`
217
+ - `acp-agent`
218
+ - `cli`
187
219
 
188
- ---
220
+ ### Where To Put `aai.json`
189
221
 
190
- ## CLI Options
222
+ #### Web Apps
223
+
224
+ Publish it at:
225
+
226
+ ```text
227
+ https://<your-host>/.well-known/aai.json
228
+ ```
191
229
 
192
- | Option | Description |
193
- | ----------- | ----------------------------------------------- |
194
- | `--dev` | Development mode, scans Xcode build directories |
195
- | `--scan` | Scan for AAI-enabled apps and exit |
196
- | `--version` | Show version |
197
- | `--help` | Show help |
230
+ AAI Gateway fetches that path when the user calls `remote:discover`.
198
231
 
199
- ---
232
+ #### macOS Apps
200
233
 
201
- ## Appendix
234
+ Recommended locations scanned by the gateway:
202
235
 
203
- ### How to Integrate
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`
204
239
 
205
- There are two ways to integrate an app with AAI Gateway:
240
+ #### Linux Apps
206
241
 
207
- #### Method 1: Provide a Descriptor File
242
+ The gateway scans for `aai.json` under:
208
243
 
209
- Place an `aai.json` descriptor at the standard location:
244
+ - `/usr/share`
245
+ - `/usr/local/share`
246
+ - `~/.local/share`
210
247
 
211
- | Platform | Location |
212
- | ----------- | -------------------------------------------- |
213
- | **Web** | `https://<your-domain>/.well-known/aai.json` |
214
- | **macOS** | `<App>.app/Contents/Resources/aai.json` |
215
- | **Windows** | `<App>.exe directory/aai.json` |
216
- | **Linux** | `/usr/share/<app>/aai.json` |
248
+ #### Windows Apps
217
249
 
218
- AAI Gateway will automatically discover and load the descriptor.
250
+ The gateway scans for `aai.json` under:
219
251
 
220
- #### Method 2: Contribute to Built-in Registry
252
+ - `C:\Program Files`
253
+ - `C:\Program Files (x86)`
254
+ - `%LOCALAPPDATA%`
221
255
 
222
- For web apps without a hosted descriptor, you can add a built-in descriptor to AAI Gateway:
256
+ ### Descriptor Guidelines
223
257
 
224
- 1. Create `src/discovery/descriptors/<app>.ts` following existing patterns
225
- 2. Register in `src/discovery/web-registry.ts`
226
- 3. Submit a pull request
258
+ Keep descriptors small and practical:
227
259
 
228
- This is useful for:
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
229
264
 
230
- - Apps without official API documentation
231
- - Custom auth configurations
232
- - Cold-start scenarios
265
+ If your app already speaks MCP, keep the descriptor minimal and let MCP provide tool detail lazily.
233
266
 
234
- #### Descriptor Format
267
+ ## Submit A Pull Request To Preload A Descriptor
235
268
 
236
- The descriptor follows the **[AAI Protocol specification](https://github.com/gybob/aai-protocol/blob/main/spec/aai-json.md)**. Key points:
269
+ If you want AAI Gateway to ship with a descriptor by default, open a PR.
237
270
 
238
- - All field names use **camelCase** (e.g., `schemaVersion`, `baseUrl`)
239
- - Supports **internationalized names** with language fallback
240
- - Auth types: `oauth2`, `apiKey`, `appCredential`, `cookie`
241
- - Tools defined with JSON Schema parameters
271
+ What to include:
242
272
 
243
- For the complete spec, see **[aai.json Descriptor Spec](https://github.com/gybob/aai-protocol/blob/main/spec/aai-json.md)**.
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
244
277
 
245
- #### Supported Auth Types
278
+ Today, built-in ACP agent descriptors live in:
246
279
 
247
- | Type | Use Case | User Flow |
248
- | --------------- | ------------------ | -------------------------- |
249
- | `oauth2` | User authorization | Browser OAuth 2.0 + PKCE |
250
- | `apiKey` | Static API tokens | Dialog prompts for token |
251
- | `appCredential` | Enterprise apps | Dialog for App ID + Secret |
252
- | `cookie` | No official API | Manual cookie extraction |
280
+ - `src/discovery/descriptors/`
253
281
 
254
- #### Platform Support
282
+ And they are registered in:
255
283
 
256
- | Platform | Discovery | IPC | Consent | Storage |
257
- | ----------- | ---------------------- | ------------ | --------- | -------- |
258
- | **macOS** | Supported | Apple Events | osascript | Keychain |
259
- | **Linux** | XDG paths | DBus (gdbus) | zenity/kdialog | libsecret |
260
- | **Windows** | Program Files | COM (PowerShell) | PowerShell | CredMan |
261
- | **Web** | `.well-known/aai.json` | HTTP | N/A | Platform |
284
+ - `src/discovery/agent-registry.ts`
262
285
 
263
- > **Note**: Linux and Windows implementations are functional but may require additional testing and refinement. Contributions are welcome!
286
+ For a typical PR:
264
287
 
265
- #### Windows Requirements
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.
266
292
 
267
- - **PowerShell 5.1+** (comes with Windows 10+)
268
- - **Execution Policy**: Must allow script execution
269
- ```powershell
270
- # Check current policy
271
- Get-ExecutionPolicy
272
-
273
- # Set to allow local scripts (recommended)
274
- Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
275
- ```
276
- - **Credential Manager**: Built-in Windows feature, no additional setup needed
293
+ If you are unsure whether an integration should be bundled, open an issue first.
277
294
 
278
- #### Linux Requirements
295
+ ## Disclaimer
279
296
 
280
- - **DBus**: Usually pre-installed on modern Linux distributions
281
- - **Dialog Tools**: Install one of the following:
282
- ```bash
283
- # Ubuntu/Debian
284
- sudo apt install zenity # or kdialog
285
-
286
- # Fedora
287
- sudo dnf install zenity # or kdialog
288
-
289
- # Arch Linux
290
- sudo pacman -S zenity # or kdialog
291
- ```
292
- - **libsecret**: For secure credential storage
293
- ```bash
294
- # Ubuntu/Debian
295
- sudo apt install libsecret-tools
296
-
297
- # Fedora
298
- sudo dnf install libsecret
299
- ```
300
-
301
- ---
302
-
303
- ### Upcoming Apps
304
-
305
- The following apps are planned for future integration, organized by priority:
306
-
307
- #### 🚀 Priority P0 - High Activity + Simple Integration
308
-
309
- | App | Auth Type | API Base | Description |
310
- |-----|-----------|----------|-------------|
311
- | **GitHub** | OAuth2 / API Key | `api.github.com` | Code hosting, repositories, issues, PRs |
312
- | **Linear** | API Key | `api.linear.app` | Modern project management |
313
- | **Stripe** | API Key | `api.stripe.com` | Payment processing |
314
- | **Slack** | OAuth2 / Bot Token | `slack.com/api` | Team messaging and channels |
315
- | **Jira** | OAuth2 / API Token | `api.atlassian.com` | Issue and project tracking |
316
- | **Gitee** | API Key | `gitee.com/api/v5` | Code hosting (China) |
317
-
318
- #### 🔥 Priority P1 - High Activity
319
-
320
- | App | Auth Type | API Base | Description |
321
- |-----|-----------|----------|-------------|
322
- | **Google Drive** | OAuth2 | `www.googleapis.com/drive` | Cloud storage and files |
323
- | **Google Calendar** | OAuth2 | `www.googleapis.com/calendar` | Calendar and scheduling |
324
- | **Airtable** | API Key / OAuth2 | `api.airtable.com` | Database and spreadsheets |
325
- | **Trello** | API Key + Token | `api.trello.com/1` | Kanban boards |
326
- | **Asana** | API Key / OAuth2 | `app.asana.com/api/1.0` | Project management |
327
- | **Discord** | Bot Token / OAuth2 | `discord.com/api/v10` | Community messaging |
328
- | **GitLab** | API Key / OAuth2 | `gitlab.com/api/v4` | DevOps platform |
329
- | **DingTalk (钉钉)** | App Credential | `api.dingtalk.com/v1.0` | Enterprise messaging (China) |
330
- | **WeCom (企业微信)** | App Credential | `qyapi.weixin.qq.com/cgi-bin` | Enterprise WeChat (China) |
331
-
332
- #### 📈 Priority P2 - Medium Activity
333
-
334
- **Project Management & Collaboration:**
335
-
336
- | App | Auth Type | Description |
337
- |-----|-----------|-------------|
338
- | Monday.com | API Key | Work management platform |
339
- | ClickUp | API Key | Productivity platform |
340
- | Basecamp | OAuth2 | Project collaboration |
341
- | Bitbucket | API Key / OAuth2 | Git repository hosting |
342
-
343
- **Communication & Email:**
344
-
345
- | App | Auth Type | Description |
346
- |-----|-----------|-------------|
347
- | Gmail | OAuth2 | Email by Google |
348
- | Microsoft Outlook | OAuth2 | Email by Microsoft |
349
- | SendGrid | API Key | Email delivery service |
350
- | Mailgun | API Key | Email API service |
351
- | Twilio | API Key | SMS and voice API |
352
- | Tencent Meeting | OAuth2 / App Credential | Video conferencing (China) |
353
-
354
- **Data & Storage:**
355
-
356
- | App | Auth Type | Description |
357
- |-----|-----------|-------------|
358
- | Supabase | API Key | Backend-as-a-Service |
359
- | PlanetScale | API Key | Serverless MySQL |
360
- | Neon | API Key | Serverless PostgreSQL |
361
- | Aliyun Drive | OAuth2 | Cloud storage (China) |
362
- | Baidu Netdisk | OAuth2 | Cloud storage (China) |
363
-
364
- **Payments & Commerce:**
365
-
366
- | App | Auth Type | Description |
367
- |-----|-----------|-------------|
368
- | PayPal | OAuth2 | Payment platform |
369
- | Square | API Key | Payment processing |
370
- | Shopify | API Key | E-commerce platform |
371
- | WeChat Pay | App Credential | Payment platform (China) |
372
-
373
- #### 🔍 Priority P3 - Search & AI
374
-
375
- | App | Auth Type | API Base | Description |
376
- |-----|-----------|----------|-------------|
377
- | Brave Search | API Key | `api.search.brave.com/res/v1` | Privacy-focused search |
378
- | Perplexity | API Key | `api.perplexity.ai` | AI search engine |
379
- | Exa | API Key | `api.exa.ai` | AI-powered search |
380
- | Tavily | API Key | `api.tavily.com` | Search API for AI |
381
-
382
- #### ❌ Not Suitable for AAI Gateway
383
-
384
- The following MCP server types are **NOT suitable** for AAI Gateway as they require local implementation:
385
-
386
- | Type | Examples | Reason |
387
- |------|----------|--------|
388
- | Local Filesystem | Filesystem, Memory | Requires local file access |
389
- | Version Control | Git | Requires local git commands |
390
- | Browser Automation | Playwright, Puppeteer | Requires browser instance |
391
- | Code Execution | E2B, Riza | Requires sandbox environment |
392
- | Database Drivers | PostgreSQL, MySQL, SQLite | Requires database drivers |
393
- | System Commands | Shell, Terminal | Requires local command execution |
394
-
395
- ---
396
-
397
- Want to see your app prioritized? [Open an issue](https://github.com/gybob/aai-gateway/issues).
398
- ## Links
297
+ AAI Gateway is still under active development.
399
298
 
400
- - **[AAI Protocol Spec](https://github.com/gybob/aai-protocol)** - Protocol specification
401
- - [Report Issues](https://github.com/gybob/aai-gateway/issues) - Bug reports and feature requests
299
+ You should expect rough edges, missing pieces, and bugs.
402
300
 
403
- ---
404
-
405
- ## License
406
-
407
- Apache-2.0
301
+ Contributions are welcome.