apex-mcp integrates directly with both Claude Code (the CLI) and Claude Desktop using the native MCP stdio transport. Once configured, Claude gains access to all 116 Oracle APEX tools — letting you create apps, generate CRUD pages, add charts, configure auth schemes, and more through natural language, without ever touching the App Builder UI.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/TechFernandesLTDA/apex-mcp/llms.txt
Use this file to discover all available pages before exploring further.
Claude Code
Install apex-mcp
Clone the repository and install it as an editable package so the Verify the install:
apex-mcp command is available in your shell:Create .mcp.json in your project root
Create a file named Replace every
.mcp.json at the root of the directory you open in Claude Code. Claude Code automatically discovers this file — no additional registration is required.YOUR_* placeholder with your actual Oracle and APEX credentials. The cwd field must point to the directory containing the apex_mcp/ package — typically the cloned repo root.| Variable | Description | Example |
|---|---|---|
ORACLE_DB_USER | Oracle schema name | TEA_APP |
ORACLE_DB_PASS | Oracle schema password | MyPass@2024 |
ORACLE_DSN | TNS alias or connect string | mydb_tp |
ORACLE_WALLET_DIR | Directory containing cwallet.sso | /opt/wallet |
ORACLE_WALLET_PASSWORD | Wallet encryption password | walletpw |
APEX_WORKSPACE_ID | Numeric APEX workspace ID | 8822816515098715 |
APEX_SCHEMA | Schema that owns APEX objects | TEA_APP |
APEX_WORKSPACE_NAME | APEX workspace name | TEA |
The
.mcp.json file is automatically picked up when Claude Code is opened in the same directory. No separate claude mcp add command is needed.Verify with /mcp
Open Claude Code in the project directory. Run the built-in MCP status command:You should see
apex-mcp listed with status connected and 116 tools available. If the server shows an error, check the troubleshooting table below.Claude Desktop
Claude Desktop uses a global JSON config file rather than a per-project.mcp.json. The JSON structure is identical — only the file location differs.
Locate the config file
Find or create the
claude_desktop_config.json file for your operating system:| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Add apex-mcp to the config
Open the config file and add the
apex-mcp entry under mcpServers. If the file already has other servers, add a comma and the new block alongside them:The JSON structure is exactly the same as the Claude Code
.mcp.json. You can copy the apex-mcp block directly between the two files.Optional: Add SQLcl MCP alongside apex-mcp
SQLcl MCP is an optional companion server that gives Claude direct SQL, PL/SQL, and DDL access with full audit logging. When both servers are running, Claude uses apex-mcp for APEX building and SQLcl MCP for data exploration and schema management. First, save a named connection in SQLcl so the server can authenticate without prompting:sqlcl entry to your .mcp.json (or claude_desktop_config.json) alongside apex-mcp:
/mcp in Claude Code to verify both servers are listed as connected.
Troubleshooting
| Problem | Solution |
|---|---|
/mcp shows no servers | Confirm .mcp.json is in the directory where Claude Code was launched |
ModuleNotFoundError: apex_mcp | Run pip install -e . from the apex-mcp repo directory |
ORA-12541: no listener | Check ORACLE_DSN matches a TNS alias in your tnsnames.ora |
ORA-28759: failure to open file | ORACLE_WALLET_DIR must point to the folder containing cwallet.sso |
DPY-6005: cannot connect to database | Verify ORACLE_WALLET_PASSWORD is correct |
| Tool calls time out | The database connection is cold; call apex_connect explicitly first |
| Server disconnects mid-session | Normal after long idle periods — apex-mcp auto-reconnects on the next tool call |
| Hammer icon missing in Claude Desktop | Restart Claude Desktop; the MCP server only starts at launch |
