A meta-layer for managing MCP servers and skill packages across multiple AI agents. Instead of configuring the same tools separately in Claude Code, Codex, and OpenCode, you import once and share everywhere. The big win is context efficiency: traditional setups inject full schemas for every tool into every conversation, but this loads a sub-50-token summary per app and fetches details on demand. It exposes search:discover for natural language tool finding, mcp:import and skill:import for registration, and aai:exec for running tools from registered apps. Auto-discovers locally installed agents and lets you enable or disable apps per agent. Useful when you're juggling multiple AI coding assistants and tired of maintaining duplicate configs or burning tokens on unused tool definitions.
claude mcp add aai-gateway -- npx -y aai-gatewayRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 11, 2026.
app:claudeClaude Code — AI assistant for code editing, analysis, and development tasks. Call this to see available tools and usage.Claude Code — AI assistant for code editing, analysis, and development tasks. Call this to see available tools and usage.
No parameters — call it with no arguments.
app:codexCodex — AI assistant powered by OpenAI for code generation and editing tasks. Call this to see available tools and usage.Codex — AI assistant powered by OpenAI for code generation and editing tasks. Call this to see available tools and usage.
No parameters — call it with no arguments.
app:opencodeOpenCode — AI assistant for editing files, running commands, and automating development tasks. Call this to see available tools and usage.OpenCode — AI assistant for editing files, running commands, and automating development tasks. Call this to see available tools and usage.
No parameters — call it with no arguments.
aai:execExecute any AAI tool action. Read the guide first (call app:*, mcp:import, skill:import, or search:discover) — it contains the required schema and parameters.3 paramsExecute any AAI tool action. Read the guide first (call app:*, mcp:import, skill:import, or search:discover) — it contains the required schema and parameters.
appstringargsobjecttool*stringmcp:importImport an MCP server as a GLOBAL app (visible to all projects). For project-level MCP, use your agent's native config instead (e.g. .mcp.json, .cursor/mcp.json). Call this first to get the import guide. Never ask the user for API keys or secrets in chat.Import an MCP server as a GLOBAL app (visible to all projects). For project-level MCP, use your agent's native config instead (e.g. .mcp.json, .cursor/mcp.json). Call this first to get the import guide. Never ask the user for API keys or secrets in chat.
No parameters — call it with no arguments.
skill:importImport a local skill as a GLOBAL app (visible to all projects). For project-level skills, use your agent's native skill directory instead (e.g. .claude/skills/). Call this first to get the import guide.Import a local skill as a GLOBAL app (visible to all projects). For project-level skills, use your agent's native skill directory instead (e.g. .claude/skills/). Call this first to get the import guide.
No parameters — call it with no arguments.
listAllAaiAppsList imported apps (MCP servers and skills) for the current agent. This does not include built-in tools like search:discover, mcp:import, or skill:import — those are always available.List imported apps (MCP servers and skills) for the current agent. This does not include built-in tools like search:discover, mcp:import, or skill:import — those are always available.
No parameters — call it with no arguments.
disableAppDisable one app for the current agent only. If you do not know the app id, call listAllAaiApps first to find it.1 paramsDisable one app for the current agent only. If you do not know the app id, call listAllAaiApps first to find it.
app*stringenableAppEnable or re-enable an app for the current agent. When the user asks to enable, start, turn on, or use a specific app by name, call listAllAaiApps first to check if it is already imported before searching for new tools.1 paramsEnable or re-enable an app for the current agent. When the user asks to enable, start, turn on, or use a specific app by name, call listAllAaiApps first to check if it is already imported before searching for new tools.
app*stringremoveAppRemove one AAI Gateway managed import from all agents. If you do not know the app id, call listAllAaiApps first to find it.2 paramsRemove one AAI Gateway managed import from all agents. If you do not know the app id, call listAllAaiApps first to find it.
app*stringconfirm*booleansearch:discoverFind and install new tools. Call this when: 1. The user explicitly asks to search for or install tools. 2. The user's request cannot be fulfilled by any currently available tool — proactively suggest and search for a suitable tool. Before searching, check listAllAaiApps first...Find and install new tools. Call this when: 1. The user explicitly asks to search for or install tools. 2. The user's request cannot be fulfilled by any currently available tool — proactively suggest and search for a suitable tool. Before searching, check listAllAaiApps first...
No parameters — call it with no arguments.
AAI = Agent App Interface
AAI Gateway is the interaction gateway for Agent Apps.
What is an Agent App? An Agent App is a collection of capabilities that an Agent can use. For example:
In AAI Gateway, they are abstracted as Agent Apps under unified management. Import once, and all AI Agents can use them immediately.
Traditional: 10 MCPs × 5 tools = 50 full schemas ≈ 7,500 tokens injected into every conversation.
AAI Gateway: each Agent App needs only fewer than 50 tokens for a summary, with details loaded on demand. 99% token savings.
Traditional: search GitHub → read READMEs → copy JSON configs → debug connections → restart Agent.
AAI Gateway: tell your Agent "use AAI to search for xxx" — auto-searches, installs, ready to use.
"Use AAI to search for a browser automation tool"
→ Search → finds Playwright MCP → Agent summarizes a one-line Agent App summary → install → ready to use, no restart needed
"Use AAI to search for a PPT creation skill"
→ Search → finds PPT Skill → uses skill description as Agent App summary → install → ready to use, no restart needed
Configure the same thing in Claude Code, Codex, and OpenCode separately? Import once through AAI Gateway, all Agents share instantly.
Claude Code:
claude mcp add --scope user --transport stdio aai-gateway -- npx -y aai-gateway
Codex:
codex mcp add aai-gateway -- npx -y aai-gateway
OpenCode — add to ~/.config/opencode/opencode.json:
{
"mcp": {
"aai-gateway": {
"type": "local",
"command": ["npx", "-y", "aai-gateway"],
"enabled": true
}
}
}
openclaw plugins install openclaw-aai-gateway-plugin
Once installed, just tell your Agent what you want to do.
| Tool | Description |
|---|---|
search:discover | Search and install new tools with natural language |
mcp:import | Import an MCP Server as an Agent App |
skill:import | Import a Skill package as an Agent App |
listAllAaiApps | List all registered Agent Apps |
enableApp / disableApp | Enable or disable an Agent App per Agent |
removeApp | Remove an Agent App |
aai:exec | Execute a specific tool within an Agent App |
Each imported Agent App generates an app_<app-id> tool that returns the full operation guide and tool list when called.
| App ID | Name | Description |
|---|---|---|
claude | Claude Code | AI coding assistant for code editing, analysis, and development |
codex | Codex | OpenAI-powered AI coding assistant |
opencode | OpenCode | AI development assistant for editing files and running commands |

Create an aai.json descriptor and submit it to src/discovery/descriptors/. When a user's local environment meets the discovery.checks conditions, the Agent will auto-discover your Agent App.
{
"schemaVersion": "2.0",
"version": "1.0.0",
"app": {
"name": { "default": "My App" }
},
"discovery": {
"checks": [
{ "kind": "command", "command": "my-app" }
]
},
"access": {
"protocol": "mcp",
"config": {
"command": "my-app-mcp",
"args": ["--stdio"]
}
},
"exposure": {
"summary": "Use when the user wants to do X."
}
}
discovery.checks supports three check types: command (command exists), file (file exists), path (directory exists).
Supported protocols: mcp, skill, acp-agent
Welcome to submit a PR to contribute new Agent App descriptors, or open an issue for feedback.