apex-mcp

mcp
Security Audit
Warn
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

MCP Server for Oracle APEX 24.2 — create, inspect and modify APEX apps via natural language with Claude Code

README.md

apex-mcp — Oracle APEX MCP Server

Build, inspect, and modify Oracle APEX 24.2 applications via natural language.
Works with Claude, GPT, Gemini, Cursor, VS Code, and any MCP-compatible AI client.

Python
FastMCP
Oracle APEX
Version
License: MIT


Overview

apex-mcp is a Model Context Protocol (MCP) server
that exposes 86 tools for building Oracle APEX 24.2 applications through AI assistants.
Built on FastMCP 3.x and Python 3.11+, it connects to Oracle Autonomous Database via the
oracledb thin driver (mTLS wallet — no Oracle Instant Client required).

Instead of navigating the APEX App Builder UI, you describe what you want and the AI does
the work: create apps, generate CRUD pages, add JET charts, configure auth schemes, export
pages, generate REST endpoints, and more.

┌─────────────────────────────────────────────────────────────────┐
│  AI Client (Claude / GPT / Gemini / Cursor / VS Code)           │
│                                                                  │
│  "Create a full HR app from the EMPLOYEES table"                 │
└────────────────────────────┬────────────────────────────────────┘
                             │ MCP (stdio or HTTP)
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  apex-mcp server (FastMCP 3.x, Python 3.11+)                    │
│  86 tools across 15 categories                                   │
└────────────────────────────┬────────────────────────────────────┘
                             │ oracledb (mTLS)
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│  Oracle Autonomous Database 23ai                                 │
│  wwv_flow_imp_page → APEX 24.2 App Builder                      │
└─────────────────────────────────────────────────────────────────┘

Supported AI Clients

Client Transport Config File Setup Guide
Claude Code stdio .mcp.json docs/setup-claude.md
Claude Desktop stdio claude_desktop_config.json docs/setup-claude.md
GPT / OpenAI Agents SDK streamable-http Python code docs/setup-gpt.md
Google Gemini CLI stdio .gemini/settings.json docs/setup-gemini.md
Cursor IDE stdio .cursor/mcp.json docs/setup-cursor.md
VS Code / GitHub Copilot stdio or http .vscode/mcp.json docs/setup-vscode.md
ZAI (visual companion) n/a side-by-side docs/setup-zai.md

Quick Start

1. Install

git clone https://github.com/your-org/apex-mcp
cd apex-mcp
pip install -e .

2. Configure

Copy and edit the config file for your AI client:

Claude Code — create .mcp.json in your project root:

{
  "mcpServers": {
    "apex-mcp": {
      "command": "python",
      "args": ["-m", "apex_mcp"],
      "cwd": "/path/to/apex-mcp",
      "env": {
        "ORACLE_DB_USER": "YOUR_SCHEMA",
        "ORACLE_DB_PASS": "YOUR_PASSWORD",
        "ORACLE_DSN": "YOUR_DSN",
        "ORACLE_WALLET_DIR": "/path/to/wallet",
        "ORACLE_WALLET_PASSWORD": "YOUR_WALLET_PW",
        "APEX_WORKSPACE_ID": "YOUR_WORKSPACE_ID",
        "APEX_SCHEMA": "YOUR_SCHEMA",
        "APEX_WORKSPACE_NAME": "YOUR_WORKSPACE"
      }
    }
  }
}

For other clients see Supported AI Clients above.

3. Verify

In Claude Code:

/mcp

You should see apex-mcp connected with 86 tools.

Then:

Connect to Oracle and list all APEX applications in the workspace.

Transport Modes

apex-mcp supports three transport modes, controlled via --transport flag or environment variables.

stdio (default — local clients)

python -m apex_mcp                        # default
python -m apex_mcp --transport stdio      # explicit
apex-mcp                                  # if installed via pip

Best for: Claude Code, Claude Desktop, Cursor, VS Code, Gemini CLI.

Streamable HTTP (remote / multi-client)

apex-mcp --transport streamable-http --port 8000
# Server available at: http://127.0.0.1:8000/mcp

Best for: OpenAI Agents SDK, Codespaces, remote setups, multiple clients.

SSE (Server-Sent Events)

apex-mcp --transport sse --port 9000
# Server available at: http://127.0.0.1:9000/sse

Best for: clients that specifically require SSE transport.

Environment Variables

All CLI flags have environment variable equivalents (lower priority than CLI args):

Variable CLI flag Default
MCP_TRANSPORT --transport stdio
MCP_HOST --host 127.0.0.1
MCP_PORT --port 8000
MCP_PATH --path /mcp (http) or /sse

Oracle Connection Variables

Variable Description
ORACLE_DB_USER Oracle schema name
ORACLE_DB_PASS Oracle schema password
ORACLE_DSN TNS alias or connect string
ORACLE_WALLET_DIR Directory containing wallet files (cwallet.sso, etc.)
ORACLE_WALLET_PASSWORD Wallet encryption password
APEX_WORKSPACE_ID Numeric APEX workspace ID
APEX_SCHEMA Schema that owns APEX objects
APEX_WORKSPACE_NAME APEX workspace name

Tool Reference

86 tools across 15 categories.

Connection & SQL

Tool Description
apex_connect Connect to Oracle ADB (mTLS wallet)
apex_run_sql Execute any SELECT/DML/DDL statement
apex_status Show connection status and session info

Applications

Tool Description
apex_create_app Create a new APEX application (starts import session)
apex_finalize_app Finalize and commit the application
apex_list_apps List all apps in the workspace
apex_delete_app Delete an application
apex_get_app_details Get full app configuration
apex_validate_app Validate app structure (home page, orphan items, etc.)
apex_dry_run_preview Toggle dry-run mode (log SQL without executing)
apex_describe_page Describe a page's components in human-readable form

Pages

Tool Description
apex_add_page Add a new page to the app
apex_list_pages List all pages
apex_get_page_details Get full page details
apex_update_page Update page properties
apex_delete_page Delete a page
apex_copy_page Copy a page to a new ID
apex_diff_app Compare app structure before/after changes

Regions & Components

Tool Description
apex_add_region Add a region (HTML, IR, report, etc.)
apex_list_regions List regions on a page
apex_update_region Update region properties
apex_delete_region Delete a region
apex_add_interactive_grid Add an Interactive Grid region
apex_add_master_detail Add a master-detail region pair
apex_add_notification_region Add a notification/alert region
apex_add_timeline Add a timeline region
apex_add_breadcrumb Add a breadcrumb navigation region
apex_add_faceted_search Add a faceted search region
apex_add_file_upload Add a file upload component
apex_add_search_bar Add a search bar component

Items (Form Fields)

Tool Description
apex_add_item Add a form item (text, select, date, etc.)
apex_list_items List items on a page
apex_update_item Update item properties
apex_delete_item Delete an item
apex_bulk_add_items Add multiple items in one call
apex_add_item_validation Add server-side validation to an item
apex_add_item_computation Add a computation to set item value

Buttons & Processes

Tool Description
apex_add_button Add a button to a page/region
apex_delete_button Delete a button
apex_add_process Add a page process (PL/SQL, DML, branch)
apex_list_processes List page processes

Dynamic Actions

Tool Description
apex_add_dynamic_action Add a dynamic action (client-side event handler)
apex_list_dynamic_actions List dynamic actions on a page

Charts & Visualizations

Tool Description
apex_add_jet_chart Add an Oracle JET chart (bar, line, pie, etc.)
apex_add_gauge Add a gauge/dial chart
apex_add_funnel Add a funnel chart
apex_add_sparkline Add a sparkline chart
apex_add_metric_cards Add metric/KPI cards with gradient styling
apex_add_calendar Add a calendar region
apex_add_chart_drilldown Add drill-down behavior to a chart

Shared Components

Tool Description
apex_add_lov Add a List of Values (static or dynamic)
apex_list_lovs List all LOVs in the app
apex_add_auth_scheme Add an authorization scheme
apex_list_auth_schemes List authorization schemes
apex_add_nav_item Add a navigation menu item
apex_add_app_item Add an application-level item (global variable)
apex_add_app_process Add an application-level process

Schema Inspection

Tool Description
apex_list_tables List Oracle tables/views in the schema
apex_describe_table Describe columns, types, PKs, FKs (with cache)
apex_detect_relationships Auto-detect FK relationships between tables

Generators (High-Level)

Tool Description
apex_generate_crud Generate full CRUD (list + form pages) for a table
apex_generate_dashboard Generate a dashboard with charts
apex_generate_login Generate a login page
apex_generate_report_page Generate a formatted report page
apex_generate_wizard Generate a multi-step wizard
apex_generate_analytics_page Generate an analytics page with multiple charts
apex_generate_from_schema Generate a full app from multiple tables
apex_generate_modal_form Generate a modal form dialog
apex_generate_rest_endpoints Generate ORDS REST endpoints for tables

JavaScript

Tool Description
apex_add_page_js Add page-level JavaScript
apex_add_global_js Add app-level global JavaScript
apex_add_global_css Add app-level CSS
apex_add_page_css Add page-level CSS
apex_generate_ajax_handler Generate an AJAX callback process

DevOps & Batch

Tool Description
apex_export_page Export a page as SQL (for version control)
apex_generate_docs Generate Markdown documentation for an app
apex_begin_batch Begin a batch operation (queue multiple SQL statements)
apex_commit_batch Execute the batch queue in one round-trip
apex_preview_page Preview page structure (without opening browser)

Setup & Validation

Tool Description
apex_setup_guide Get setup instructions for this workspace
apex_check_requirements Verify all requirements are met
apex_check_permissions Verify Oracle grants and APEX access
apex_fix_permissions Auto-fix common permission issues

Users

Tool Description
apex_create_user Create an APEX workspace user
apex_list_users List workspace users

Code Examples

Example 1: Full app from schema (single command)

# Uses apex_generate_from_schema internally
# Prompt: "Generate a full app from tables EMPLOYEES, DEPARTMENTS, JOBS"
# Result: App with CRUD pages, dashboard, navigation — in ~10 seconds

Example 2: Incremental build

1. apex_connect()
2. apex_create_app(app_id=200, app_name="Inventory", home_page=1)
3. apex_add_page(page_id=1, page_name="Dashboard", page_mode="Normal")
4. apex_add_region(page_id=1, region_name="KPIs", region_type="STATIC")
5. apex_add_metric_cards(page_id=1, region_id=..., metrics=[...])
6. apex_generate_crud(table_name="PRODUCTS", start_page_id=10)
7. apex_add_nav_item("Dashboard", app_id=200, page_id=1, icon="fa-home")
8. apex_add_nav_item("Products", app_id=200, page_id=10, icon="fa-box")
9. apex_finalize_app()

Example 3: OpenAI Agents SDK

import asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
    # apex-mcp must be running: apex-mcp --transport streamable-http
    async with MCPServerStreamableHttp(url="http://127.0.0.1:8000/mcp") as apex:
        agent = Agent(
            name="APEX Developer",
            instructions="Build Oracle APEX apps using apex-mcp tools.",
            mcp_servers=[apex],
        )
        result = await Runner.run(
            agent,
            "Connect to Oracle and generate a CRUD app for the ORDERS table."
        )
        print(result.final_output)

asyncio.run(main())

Example 4: Batch operations

apex_begin_batch()
# ... add many regions, items, processes ...
apex_commit_batch(rollback_on_error=True)
# All statements execute in one round-trip; rolls back on any error

Example 5: Dry-run mode

apex_dry_run_preview(enabled=True)
apex_generate_crud(table_name="EMPLOYEES")
# Logs all SQL without executing — useful for review before committing
apex_dry_run_preview(enabled=False)

Architecture

apex_mcp/
├── server.py          Entry point — FastMCP 3.x, argparse (stdio/http/sse)
├── __main__.py        Enables `python -m apex_mcp`
├── __init__.py        Version: 0.2.0
├── config.py          Constants (APEX version, workspace ID, date format)
├── db.py              ConnectionManager singleton — mTLS, retry, batch, dry-run
├── ids.py             Sequential ID generator (base 8_900_000_000_000_000)
├── session.py         ImportSession — tracks pages, regions, items, buttons
├── templates.py       Hardcoded Universal Theme 42 template IDs
├── validators.py      Input validation (page IDs, SQL, chart types, table names)
├── utils.py           Shared helpers (_esc, _blk, _sql_to_varchar2)
└── tools/
    ├── sql_tools.py       apex_connect, apex_run_sql, apex_status
    ├── app_tools.py       apex_create_app, apex_finalize_app, ...
    ├── page_tools.py      apex_add_page, apex_list_pages
    ├── component_tools.py apex_add_region, apex_add_item, apex_add_button, ...
    ├── shared_tools.py    apex_add_lov, apex_add_auth_scheme, ...
    ├── schema_tools.py    apex_list_tables, apex_describe_table, ...
    ├── generator_tools.py apex_generate_crud, apex_generate_dashboard, ...
    ├── js_tools.py        apex_add_page_js, apex_add_global_js, ...
    ├── inspect_tools.py   apex_get_app_details, apex_update_*, apex_delete_*, ...
    ├── user_tools.py      apex_create_user, apex_list_users
    ├── setup_tools.py     apex_setup_guide, apex_check_requirements, ...
    ├── validation_tools.py apex_add_item_validation, apex_add_item_computation
    ├── visual_tools.py    apex_add_jet_chart, apex_add_gauge, ...
    ├── advanced_tools.py  apex_generate_report_page, apex_generate_wizard, ...
    └── devops_tools.py    apex_generate_rest_endpoints, apex_export_page, ...

How APEX creation works

apex-mcp creates APEX applications by generating and executing wwv_flow_imp_page.*
PL/SQL calls directly against the Oracle database — the same mechanism used by APEX's
own import/export system. This bypasses the App Builder UI entirely and is fully
compatible with APEX 24.2.13 / Universal Theme 42.

HTTP transport note

When using --transport streamable-http or --transport sse, apex-mcp is a
single-user server: the ImportSession singleton means only one active import
session exists at a time. For multi-user scenarios, run separate server instances
on different ports.


Known Limitations

Limitation Details
Single import session Only one apex_create_appapex_finalize_app sequence at a time
No HTTP authentication Bind HTTP transport to 127.0.0.1 (default); add a reverse proxy for remote access
APEX 24.2 only wwv_flow_imp_page API is version-specific; not tested on APEX 23.x or 25.x
Oracle mTLS required TLS direct connections are not supported (wallet required)
Licensed instrument content TEA_QUESTOES / TEA_OPCOES_RESPOSTA tables are empty (content is licensed)

Requirements

Component Version
Python 3.11+
FastMCP 3.0.0+
oracledb 2.0.0+
Oracle APEX 24.2 (Universal Theme 42)
Oracle DB 19c+ (tested on ADB 23ai)
Oracle Wallet Required for mTLS connections

No Oracle Instant Client required — the oracledb thin driver handles mTLS natively.


Troubleshooting

Connection issues

Error Cause Solution
ORA-12541: no listener Wrong DSN Check ORACLE_DSN matches the TNS alias in tnsnames.ora
ORA-28759: failure to open file Wrong wallet path ORACLE_WALLET_DIR must contain cwallet.sso
DPY-6005: cannot connect to database Wallet password wrong Check ORACLE_WALLET_PASSWORD
ModuleNotFoundError: apex_mcp Not installed Run pip install -e . from apex-mcp directory

APEX issues

Error Cause Solution
ORA-20987: APEX - Application not found Wrong app_id or workspace Check APEX_WORKSPACE_ID and run apex_list_apps
ORA-01403: no data found in item creation Missing p_attributes on DatePicker Fixed in v0.2.0 — update to latest
PLS-00306: wrong number of arguments Wrong process parameter name Use p_process_success_message not p_success_message
Buttons not showing on Standard pages Wrong region position Use content region positions (CLOSE/CREATE), not dialog footer

HTTP transport issues

Problem Solution
ConnectionRefusedError Start server with apex-mcp --transport streamable-http first
404 Not Found at / Default path is /mcp; use curl http://127.0.0.1:8000/mcp
OpenAI SDK can't connect Ensure MCPServerStreamableHttp URL matches --path setting

Running Tests

cd apex-mcp
pip install -e ".[dev]"

# Unit tests (no database required)
pytest tests/ -v -m "not integration"

# All tests including integration (requires live Oracle connection)
pytest tests/ -v

The test suite has 51 unit tests covering tools, validators, and generators.


Demo Scripts

Script Description
demos/build_app100.py TEA clinical assessment app (15 pages, 46 items)
demos/build_app203.py Analytics dashboard with JET charts + metric cards
demos/build_app204.py Backoffice from schema (8 tables, 17 pages, score 100/100)
demos/build_app205.py Assessment wizard (4-step wizard, CRUD, dashboard, 9s build)
demos/demo_rest_endpoints.py 5 tables → 25 ORDS endpoints in 1 second
demos/demo_generate_docs.py Auto-generate Markdown docs for an app

Run any demo (requires live Oracle connection):

python demos/build_app205.py

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new tools in tests/
  4. Ensure pytest tests/ -m "not integration" passes
  5. Submit a pull request

Adding a new tool

  1. Add the function to the appropriate tools/*.py module
  2. Register it in server.py with mcp.tool()(function_name)
  3. Add unit tests in tests/
  4. Update the Tool Reference section in this README

License

MIT — see LICENSE for details.


pt-BR: Este servidor MCP foi construído para o projeto Plataforma Desfecho TEA (Unimed Nacional),
usando Oracle APEX 24.2 + Oracle ADB 23ai. Para configuração detalhada do ambiente de produção,
consulte o CLAUDE.md na raiz do projeto.

Reviews (0)

No results found