Oracle E-Business Suite (EBS R12) Concurrent Request MCP Server
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., "@Oracle E-Business Suite (EBS R12) Concurrent Request MCP ServerSubmit the Worker Summary Report for Org 8043 and show me the log when it completes"
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.
Oracle E-Business Suite (EBS R12) Concurrent Request MCP Server
A production-ready Model Context Protocol (MCP) Server written in Python that enables AI assistants (Claude, Cursor, Antigravity) to securely submit, monitor, wait for, and retrieve logs for Oracle E-Business Suite R12 Concurrent Requests using the Global HRMS Manager responsibility.
šļø Architecture & EBS Context Flow
Why Standard SQL Is Not Enough
In Oracle E-Business Suite (EBS R12), concurrent programs cannot be submitted by simply inserting rows into fnd_concurrent_requests. Doing so bypasses:
Multi-Org and Data Security Policies (MOAC, HRMS security profiles).
Concurrent Manager scheduling queues and trigger logic.
User authorization checks and profile options (
FND_PROFILE).
EBS Authentication & Session Context Architecture
The MCP Server maintains a strict boundary between the database connection and the application user context:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā AI Assistant ā
ā ("Run Worker Summary Report for Org 8043") ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā MCP Protocol (JSON-RPC)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Oracle EBS Concurrent MCP Server (Python) ā
ā ā
ā 1. Security Guardrails & Program Allowlist Verification ā
ā ⢠Validates program is in ALLOWED_CONCURRENT_PROGRAMS ā
ā ⢠Sanitizes all arguments & blocks shell injection ā
ā ā
ā 2. Dynamic Responsibility Context Resolution ā
ā ⢠Query FND_USER: Resolve USER_ID (e.g. SYSADMIN = 0) ā
ā ⢠Query FND_RESPONSIBILITY_VL: Resolve RESP_ID (21514) ā
ā and RESP_APPL_ID (800 / PER) ā
ā ⢠Verify authorization in FND_USER_RESP_GROUPS_ALL ā
ā ā
ā 3. PL/SQL Apps Session Initialization ā
ā ⢠Execute FND_GLOBAL.APPS_INITIALIZE(...) ā
ā ā
ā 4. Public API Submission ā
ā ⢠Execute FND_REQUEST.SUBMIT_REQUEST(...) ā
ā ⢠Commit transaction & return new REQUEST_ID ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Oracle Net (port 1521 / 1532)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Oracle Database (EBS R12) ā
ā Concurrent Managers (Internal Manager / Conflict) ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāEntity Distinction in Oracle EBS
Entity | Role in MCP Server | Example Value |
Database User | Establishes the physical database socket connection |
|
EBS Application User | Identity under which the request is audited and logged |
|
Responsibility | Defines role, menus, and HRMS security profile permissions |
|
Responsibility Application | Application owning the responsibility |
|
Related MCP server: jasperreports-mcp-server
š”ļø Security Guardrails
š« No Arbitrary SQL Execution: There is NO
execute_sqltool. The server completely disallows direct DML/DDL (DROP,DELETE,UPDATE,INSERT,ALTER,TRUNCATE,MERGE,GRANT,REVOKE).š« No OS / Shell Execution: Never executes arbitrary shell commands. Metacharacters (
`,;,&,|,$,>,<) are stripped and rejected from all parameters.š Strict Program Allowlist: Only programs explicitly configured in
ALLOWED_CONCURRENT_PROGRAMScan be submitted. Unauthorized requests immediately fail with:ERROR: Concurrent Program '<NAME>' is not authorized. Only the following approved programs may be executed: [...]š Secret & Credential Masking: Passwords, connection strings, and tokens are automatically redacted from all outputs, error logs, and client messages.
ā” Connection Pool & Auto-Rollback: Connections are acquired from a managed pool with timeouts (
QUERY_TIMEOUT_SECONDS) and uncommitted transactions are rolled back automatically upon release.
š Project Structure
oracle-ebs-mcp/
ā
āāā src/
ā āāā server.py # FastMCP Server registering the 5 tools
ā āāā config.py # Validated environment configuration
ā āāā database.py # oracledb Thin Mode connection pool & timeouts
ā āāā security.py # Allowlist validator & parameter sanitization
ā āāā ebs_context.py # Dynamic resolution & FND_GLOBAL.APPS_INITIALIZE
ā ā
ā āāā tools/
ā āāā __init__.py
ā āāā concurrent_submit.py # list_allowed_concurrent_programs & submit_concurrent_request
ā āāā concurrent_status.py # get_concurrent_request_status (FND_CONCURRENT)
ā āāā concurrent_wait.py # wait_for_concurrent_request (polling loop)
ā āāā concurrent_output.py # get_concurrent_request_log (sanitized log retrieval)
ā
āāā tests/
ā āāā test_security.py # Allowlist, injection filter, secret masking tests
ā āāā test_context.py # Context resolution & APPS_INITIALIZE tests
ā āāā test_config.py # Configuration and env parsing tests
ā āāā test_concurrent_tools.py # Mocked execution tests for all 5 tools
ā
āāā .env.example # Template environment configuration
āāā .env # Local environment variables
āāā .gitignore
āāā requirements.txt # Python dependencies
āāā pyproject.toml # Project metadata
āāā run_tests.py # Test runner
āāā README.md # Complete documentationāļø Configuration & Environment Variables
Copy .env.example to .env and fill in your Oracle EBS environment details:
# Oracle Database Connection Details
ORACLE_HOST=10.100.100.104
ORACLE_PORT=1532
ORACLE_SERVICE=HRVIS
ORACLE_USER=apps
ORACLE_PASSWORD=apps
# Oracle EBS Responsibility & Security Context
EBS_USER_ID=0
EBS_USERNAME=SYSADMIN
# Global HRMS Manager Responsibility Context
EBS_RESPONSIBILITY_ID=21514
EBS_RESPONSIBILITY_APPL_ID=800
EBS_RESPONSIBILITY_NAME=Global HRMS Manager
# Concurrent Program Security Allowlist (comma-separated short names)
ALLOWED_CONCURRENT_PROGRAMS=PERRPPSM,PERRPRAA,PERRPRAS,PERRPRBD,PERRPRMS,XX_EMPLOYEE_REPORT,XX_ABSENCE_REPORT,FNDCPPRT
# Connection Pool & Safety Limits
ORACLE_POOL_MIN=1
ORACLE_POOL_MAX=5
QUERY_TIMEOUT_SECONDS=30
POLL_INTERVAL_SECONDS=5
POLL_TIMEOUT_SECONDS=180
LOG_LEVEL=INFONote: If
EBS_USER_ID,EBS_RESPONSIBILITY_ID, orEBS_RESPONSIBILITY_APPL_IDare omitted or left blank, the MCP Server dynamically resolves them by queryingFND_USERandFND_RESPONSIBILITY_VLusingEBS_USERNAMEandEBS_RESPONSIBILITY_NAME.
š Installation & Running
1. Requirements
Python 3.11+
Network access to Oracle Database port (e.g. 1521 or 1532)
oracledbruns in Thin Mode (pure Python, no Oracle Instant Client required).
2. Setup Virtual Environment
cd oracle-ebs-mcp
# Windows
python -m venv .venv
.venv\Scripts\activate
# Linux / macOS
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt3. Run Tests
python run_tests.pyOutput:
Ran 20 tests in 2.0s
OK4. Start the MCP Server Manually
python -m src.serverš§° MCP Tools Reference
1. list_allowed_concurrent_programs
Lists all concurrent programs that the AI assistant is authorized to execute.
Input: None
Example Output:
[
{
"program": "Worker Summary Report",
"short_name": "PERRPPSM",
"application": "Human Resources",
"application_short_name": "PER",
"description": "Prints worker headcount summary by organization"
},
{
"program": "Absences Report",
"short_name": "PERRPRAA",
"application": "Human Resources",
"application_short_name": "PER",
"description": "Employee absence listing"
}
]2. submit_concurrent_request
Submits an authorized concurrent program under Global HRMS Manager.
Inputs:
program_short_name(string, required): Concurrent program short name (e.g.,PERRPPSM).parameters(array of strings/numbers, optional): Arguments to pass to the program (up to 20).application_short_name(string, optional): E.g.,PERorXX. Auto-detected if omitted.
Execution Steps:
Validates program against
ALLOWED_CONCURRENT_PROGRAMS.Validates and sanitizes parameters (rejects shell injection).
Initializes EBS context via
FND_GLOBAL.APPS_INITIALIZE.Submits via
FND_REQUEST.SUBMIT_REQUEST.Returns the generated numeric
request_id.
Example Output:
{
"status": "success",
"request_id": 10125,
"program": "Worker Summary Report",
"short_name": "PERRPPSM",
"application": "PER",
"responsibility": "Global HRMS Manager",
"parameters": ["8043", "Y"],
"phase": "Pending",
"request_status": "Normal",
"message": "Concurrent Request submitted successfully. Request ID: 10125"
}3. get_concurrent_request_status
Checks real-time phase, status, and lifecycle timestamps for a concurrent request.
Inputs:
request_id(integer, required): The numeric Request ID.
Example Output:
{
"status": "success",
"request_id": 10125,
"program_name": "Worker Summary Report",
"program_short_name": "PERRPPSM",
"phase": "Completed",
"request_status": "Normal",
"phase_code": "C",
"status_code": "C",
"developer_phase": "COMPLETE",
"developer_status": "NORMAL",
"requested_start_date": "2026-09-14 15:00:00",
"actual_start_date": "2026-09-14 15:00:02",
"completion_date": "2026-09-14 15:00:45",
"duration_minutes": 0.72,
"completion_text": "Program completed successfully.",
"requested_by": "SYSADMIN",
"responsibility": "Global HRMS Manager"
}4. wait_for_concurrent_request
Polls the request until it reaches a terminal state (COMPLETED_NORMAL, ERROR, WARNING, CANCELLED) or reaches a timeout.
Inputs:
request_id(integer, required): Request ID.poll_interval_seconds(integer, optional, default: 5): Delay between status checks.timeout_seconds(integer, optional, default: 180): Maximum seconds to wait.
Example Output:
{
"status": "success",
"request_id": 10125,
"terminal_state": "COMPLETED_NORMAL",
"phase": "Completed",
"request_status": "Normal",
"phase_code": "C",
"status_code": "C",
"program_name": "Worker Summary Report",
"completion_text": "Program completed successfully.",
"completion_date": "2026-09-14 15:00:45",
"total_wait_seconds": 12.4,
"attempts": 3,
"is_completed": true
}5. get_concurrent_request_log
Retrieves execution log or output file text with automatic secret sanitization.
Inputs:
request_id(integer, required): Request ID.file_type(string, optional, default:'log'):'log'for execution log,'out'for report output.max_lines(integer, optional, default: 100): Maximum tail lines to return.
Example Output:
{
"status": "success",
"request_id": 10125,
"file_type": "log",
"file_accessible_on_host": false,
"line_count": 4,
"completion_text": "Program completed successfully.",
"lines": [
"Program: Worker Summary Report",
"Phase: C, Status: C",
"Remote File Path: /u01/install/APPS/fs2/EBSapps/appl/per/12.0.0/log/l10125.req",
"Completion Summary: Program completed successfully."
]
}š» AI Client Configuration
Claude Desktop Configuration
Add the server to your Claude Desktop configuration file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"oracle-ebs-concurrent": {
"command": "C:\\Users\\RayaIT-Admin\\Downloads\\New folder\\screenshots\\oracle-ebs-mcp\\.venv\\Scripts\\python.exe",
"args": [
"-m",
"src.server"
],
"cwd": "C:\\Users\\RayaIT-Admin\\Downloads\\New folder\\screenshots\\oracle-ebs-mcp",
"env": {
"ORACLE_HOST": "10.100.100.104",
"ORACLE_PORT": "1532",
"ORACLE_SERVICE": "HRVIS",
"ORACLE_USER": "apps",
"ORACLE_PASSWORD": "apps",
"EBS_USER_ID": "0",
"EBS_USERNAME": "SYSADMIN",
"EBS_RESPONSIBILITY_ID": "21514",
"EBS_RESPONSIBILITY_APPL_ID": "800",
"EBS_RESPONSIBILITY_NAME": "Global HRMS Manager",
"ALLOWED_CONCURRENT_PROGRAMS": "PERRPPSM,PERRPRAA,PERRPRAS,PERRPRBD,PERRPRMS,XX_EMPLOYEE_REPORT,XX_ABSENCE_REPORT,FNDCPPRT"
}
}
}
}Antigravity IDE / Cursor / VS Code Configuration
Add to .vscode/settings.json or Antigravity MCP settings:
{
"mcp": {
"servers": {
"oracle-ebs-concurrent": {
"type": "stdio",
"command": "python",
"args": ["-m", "src.server"],
"cwd": "${workspaceFolder}/oracle-ebs-mcp"
}
}
}
}š¬ Example User Prompts
Once configured, users can interact naturally with the AI assistant:
Example 1: Discover Allowed Programs
User: What Oracle EBS reports am I allowed to run?
AI Assistant: Calls
list_allowed_concurrent_programsand lists available HRMS reports (Worker Summary Report, Absences Report, etc.).
Example 2: Submit and Monitor a Request
User: Run the Worker Summary Report for organization 8043.
AI Assistant:
Calls
submit_concurrent_request(program_short_name="PERRPPSM", parameters=["8043", "Y"]).Receives
Request ID: 10125.Calls
wait_for_concurrent_request(request_id=10125).Informs user: "Concurrent Request #10125 has completed with status Normal in 12.4 seconds."
Example 3: Check Request Log
User: Check the log for request 10125.
AI Assistant: Calls
get_concurrent_request_log(request_id=10125)and presents the sanitized summary.
Example 4: Security Rejection
User: Run program DROP_DATABASE or submit an unauthorized custom program.
AI Assistant: Rejects the action: "ERROR: Concurrent Program 'DROP_DATABASE' is not authorized. Only allowed HRMS programs can be executed."
š„ļø Oracle EBS R12 Development MCP Studio (Web UI)
A dedicated, UI-first development workbench tailored for Oracle EBS R12 Technical Consultants. It allows fast visual configuration and instant code generation across all major EBS technical domains:
Concurrent Program: Automatic
fnd_program.executable,register,parameter, andadd_to_groupPL/SQL scripts + complete standard package specs and bodies.Report Generator: Main SQL query builder, dynamic parameter rows, BI Publisher Data Template XML, RTF layout guidelines, and Java XDOLoader shell scripts.
Workflow Studio: Item Type, Item Key, Process Name, approval routing, and activity handler PL/SQL packages with
wf_enginelifecycle events (RUN,CANCEL,TIMEOUT).Alert Manager: Event & Periodic alerts, table trigger definitions,
:ROWIDbindings, and HTML/text email notification templates.OAF Studio (OA Framework): Full Java Controllers (
OAControllerImplwithprocessRequest/processFormRequest), XMLImporter commands, and OACore service bounce procedures.SQL & PL/SQL Studio: Autonomous packages, standard error logging (
FND_LOG), exception stacks, and wrappers for Oracle Public APIs (HR_PERSON_ABSENCE_API,HR_EMPLOYEE_API,FND_USER_PKG).
Launching the UI
python ui/server_launcher.pyOr open ui/index.html directly in any modern web browser.
This server cannot be deployed
Maintenance
Related MCP Connectors
- StackOneOAuthcom.stackone
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
Connect, monitor, and control AI agents ā tasks, approvals, schedules, and governance.
Malaysian SME accounting, e-Invoice and payroll for your AI. 64 tools; writes are approved drafts.
Discover, preview, estimate, run, and retrieve reusable AI workflows.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceConnect AI agents to Oracle EPM Cloud (Planning, PBCS, EPBCS) via REST APIs. Automate month-end close, run business rules, manage substitution variables, refresh databases, export data slices, and monitor job status through natural language. Built by Fred Mamadjanov, Oracle ACE and EPM Solution Architect.14MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with JasperReports Server for report execution, resource management, and job scheduling via MCP tools.6 npm9GPL 3.0
- FlicenseBqualityDmaintenanceEnables AI assistants to interact with the HRD-PIS API for HR profile management, including authentication and various HR operations.16-
- FlicenseNot gradedqualityBmaintenanceProvides AI assistants with secure, structured access to Oracle Database through MCP, enabling SQL execution, metadata exploration, and stored procedure execution.-