aai-gateway
Provides access to Codex capabilities for AI-assisted coding tasks, enabling code generation, editing, and development.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aai-gatewaysearch for a browser automation tool"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AAI Gateway: Unified MCP & Skill Management, Shared Across AI Agents, 99% Context Token Savings
What Is It
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:
An MCP Server is an Agent App — it provides a set of tools
A Skill package is an Agent App — it provides one or more skills
In AAI Gateway, they are abstracted as Agent Apps under unified management. Import once, and all AI Agents can use them immediately.
Related MCP server: Skillsmith
What Problems Does It Solve
Context Bloat
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.
Finding Tools Is Hard
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
Duplicate Config
Configure the same thing in Claude Code, Codex, and OpenCode separately? Import once through AAI Gateway, all Agents share instantly.
Quick Start (30 Seconds)
Claude Code:
claude mcp add --scope user --transport stdio aai-gateway -- npx -y aai-gatewayCodex:
codex mcp add aai-gateway -- npx -y aai-gatewayOpenCode — add to ~/.config/opencode/opencode.json:
{
"mcp": {
"aai-gateway": {
"type": "local",
"command": ["npx", "-y", "aai-gateway"],
"enabled": true
}
}
}openclaw plugins install openclaw-aai-gateway-pluginOnce installed, just tell your Agent what you want to do.
Built-in Tools
Tool | Description |
| Search and install new tools with natural language |
| Import an MCP Server as an Agent App |
| Import a Skill package as an Agent App |
| List all registered Agent Apps |
| Enable or disable an Agent App per Agent |
| Remove an Agent App |
| 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.
Preset Agent Apps (auto-discovered when locally installed)
App ID | Name | Description |
| Claude Code | AI coding assistant for code editing, analysis, and development |
| Codex | OpenAI-powered AI coding assistant |
| OpenCode | AI development assistant for editing files and running commands |
Architecture

Developers: Get Your Agent App Auto-Discovered
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.
Available Tools
8 toolsaai:execA
Execute any AAI tool action. Read the guide first (call app:*, mcp:import, skill:import, or search:discover) — it contains the required schema and parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| app | No | Required for app tools, omit or use "gateway" for gateway tools. | |
| tool | Yes | Tool name within the app, not prefixed with app id. | |
| args | No | Arguments for the selected tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'Execute' without disclosing whether the action is destructive, requires authentication, or has rate limits. Critical behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences: one for purpose, one for prerequisite. No fluff, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the generic nature and lack of output schema, the description is too terse. It does not explain the output format, error handling, or how to interpret the guide's content. The agent would struggle to use this tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by referencing that the 'args' schema comes from a separate guide, which is crucial for understanding how to construct arguments. Without this, the agent wouldn't know that the schema here is generic.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute any AAI tool action' with a specific verb and resource. It distinguishes itself from sibling tools like disableApp or skill:import by being the generic entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to 'Read the guide first' and lists the specific calls (app:*, mcp:import, etc.) that contain the required schema. This provides a clear prerequisite, though it does not explicitly exclude use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disableAppA
Disable one app for the current agent only. If you do not know the app id, call listAllAaiApps first to find it.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | Required. The app id to disable. Use listAllAaiApps to look up available app ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only says 'disable' but does not disclose side effects, reversibility, or impact on other agents. For a destructive action, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. Front-loaded with action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for simplicity: covers purpose, prerequisite, scope. No output schema, so missing return value info. Could mention what happens after disabling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds value by telling agent to use listAllAaiApps to find the app id, beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'disable' and resource 'one app' with scope 'for the current agent only'. Distinguishes from siblings like enableApp and removeApp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states prerequisite: call listAllAaiApps if app id unknown. Does not provide when-not-to-use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enableAppA
Enable 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.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | Required. The app id to re-enable. Use listAllAaiApps to look up available app ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states action without detailing side effects, permissions, or error cases. Lacks disclosure of re-enable behavior or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with clear front-loading: purpose then usage guideline. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and parameter source. Lacks output description, but no output schema exists. Could mention idempotency, but adequate for simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers parameter with description. Description adds value by specifying that app id comes from listAllAaiApps and emphasizing requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states action 'enable or re-enable' and resource 'app' for current agent. Distinguishes from siblings like disableApp and removeApp, and includes context to call listAllAaiApps first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly specifies when to use (when user asks to enable/start/turn on/use app) and provides alternative reference to listAllAaiApps for checking import status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listAllAaiAppsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that built-in tools are excluded, which is a behavioral trait. However, it does not explicitly state that the operation is read-only, though the name 'list' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise with two sentences, front-loading the main purpose and adding a clarifying exclusion. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is sufficient. It lists what the tool returns and what it excludes. It could optionally describe the return format, but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so baseline is 4. The description adds no parameter details, which is acceptable given no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'list', the resource 'imported apps (MCP servers and skills)', and scope 'for the current agent'. It clearly differentiates from sibling tools by explicitly stating which built-in tools are not included.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that built-in tools like search:discover, mcp:import, and skill:import are not listed, implying when not to use this tool. However, it does not directly suggest alternative tools for those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp:importA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states 'Call this first to get the import guide' without clarifying whether the tool actually imports or just returns instructions. This ambiguity limits transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is relatively concise with three sentences, though the instruction 'Never ask the user for API keys or secrets in chat' is a behavioral directive for the agent, not a tool description, slightly reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema or parameters, the description covers the basic purpose but fails to specify the tool's return value or behavior after invocation, leaving ambiguity about whether it performs the import or only provides a guide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, and schema coverage is 100%. Baseline for 0-param tools is 4, and description adds no additional parameter info beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool imports an MCP server as a global app, with a specific verb and scope. It distinguishes from project-level usage by referencing native config files, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance to use native config for project-level MCP, indicating when not to use the tool. However, it does not differentiate from sibling tools like skill:import, though the scope difference is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
removeAppA
Remove one AAI Gateway managed import from all agents. If you do not know the app id, call listAllAaiApps first to find it.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | Required. The imported app id to remove globally. Use listAllAaiApps to look up available app ids. | |
| confirm | Yes | Required. Must be true only after the agent explains the global impact and the user explicitly confirms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It notes the global scope ('from all agents') and the confirm parameter's schema description requires user confirmation after explaining global impact. This sufficiently discloses the destructive nature and necessary safeguard.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences front-load the action and scope, with the second providing actionable guidance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, prerequisite, and confirmation requirement adequately. It lacks details on reversibility or return format, but is sufficient given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by linking the 'app' parameter to listAllAaiApps and emphasizing the global scope, going beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes an AAI Gateway managed import from all agents, with a specific verb and resource. It also mentions a prerequisite (calling listAllAaiApps) that distinguishes it from sibling tools like disableApp or listAllAaiApps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to call listAllAaiApps first if the app id is unknown, providing clear context. However, it does not compare to alternatives like disableApp or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search:discoverA
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 — the user may already have the app imported (possibly disabled).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It mentions proactive suggestion and checking listAllAaiApps, implying behavior to avoid duplicates. However, lacks details on installation side effects, permissions, or conflict handling. Good but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences with bullet-like conditions. No wasted words, front-loaded with purpose. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and moderate complexity, the description covers purpose, usage conditions, and references sibling tool listAllAaiApps. Provides sufficient context for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, schema coverage 100% (trivially). Baseline is 4 for 0 params. Description adds no parameter info, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find and install new tools' as a specific verb+resource. It distinguishes from siblings like listAllAaiApps (listing imported apps) and mcp:import (importing specific apps).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly lists two scenarios: user asking to search/install, and proactive suggestion when no tool available. Also provides a when-not: 'check listAllAaiApps first' to avoid unnecessary search. Excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skill:importA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full transparency burden. It hints that calling first returns a guide, but it does not explicitly state that the tool does not perform the final import, nor does it disclose side effects, permissions, or auth needs. The name 'import' could mislead agents into thinking the tool actually imports, making transparency moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no fluff. It front-loads the main action and includes key usage guidance. Every word adds value, making it efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, the description mostly covers what the tool does and when to use it. However, it leaves ambiguity about the 'import guide' content and next steps. It is fairly complete but could mention that the tool returns instructions rather than performing the import.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the schema, so schema coverage is 100% vacuously. The description adds no parameter info, but none is needed. Baseline for zero parameters is 4, and the description provides useful context about the tool's purpose, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool imports a local skill as a global app, distinguishing it from project-level skills by recommending a native directory. The verb 'import' and resource 'local skill' are specific, and the contrast with project-level usage makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'For project-level skills, use your agent's native skill directory instead' and 'Call this first to get the import guide.' This tells the agent when to use this tool vs. alternatives and what to expect after calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.1.11-beta.1- First observed
aai:exec - First observed
disableApp - First observed
enableApp - First observed
listAllAaiApps - First observed
mcp:import - First observed
removeApp - First observed
search:discover - First observed
skill:import
TDQS
Scored across 8 tools
Most tools have distinct purposes (e.g., disableApp vs enableApp, specific imports), but 'aai:exec' is a catch-all that could overlap with other actions, causing mild ambiguity.
Names mix colon-separated (aai:exec, mcp:import) and camelCase (disableApp, listAllAaiApps), creating an inconsistent pattern. Though readable, the lack of a uniform convention is noticeable.
Eight tools cover the core functions (list, enable, disable, remove, import, search, execute) without being excessive. The scope is well-contained for a gateway server.
The tool set covers key lifecycle operations for apps and imports. Missing explicit update or detail tools, but 'aai:exec' may fill those gaps; minor gap in app detail retrieval.
Maintenance
Related MCP Connectors
Search & install 6,500+ AI agent skills from skills-hub.ai inside any MCP tool.
AI agent skills marketplace — token-efficient skill search & execution
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
One profile — skills, credentials, and memory — synced to every agent tool via one MCP URL.
Related MCP Servers
- AlicenseAqualityFmaintenanceAgent-first skill marketplace MCP server. AI agents discover, install, and share skills across 7 platforms via MCP protocol. 15 tools including skill search, download, upload, and agent discovery.184MIT
- AlicenseNot gradedqualityAmaintenanceAn agent skill discovery, recommendation, and management system for MCP-compatible AI tools, enabling search, install, validate, and compare skills from GitHub.5 npm78MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lets AI agents search, view, install, and validate skills from the skillhub registry through tool calls.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to search, browse, install, and manage a large library of skills via only 7 MCP tools, with skills stored locally and loaded on demand to minimize context overhead.4-