MCP Server for Oracle EPM Cloud — connect Claude and AI agents to Planning, FCCS, and PCM via REST APIs.
The Oracle EPM Cloud MCP server has well-intentioned tool definitions with reasonable descriptions and clear naming. However, several significant quality gaps prevent it from reaching production-grade status. All 7 tools are explicitly registered with names, descriptions, and input schemas visible in server/index.js. Tool names follow verb_noun convention (get_*, list_*, run_*, check_*, export_*, update_*) which is positive. However, parameter descriptions are minimal or absent in most cases, and output schemas are completely undocumented. The tools return raw JSON dumps of API responses without any structure guidance for LLM parsing. Error handling is absent, there are no recovery guides, error classifications, or actionable error messages. The lack of pagination support on list_applications and export_data_slice creates risks of context window exhaustion. While descriptions average ~100 chars (within baseline), they lack the specificity and LLM-optimization patterns needed for confident tool selection in complex scenarios.
Poll the status of a running job. Status: -1=Processing, 0=Completed, 1=Error, 2=Cancelled.
Export a slice of data from the EPM cube. Specify dimension members to filter.
Discover which REST API versions your Oracle EPM Cloud environment supports. Run this first to confirm connectivity.
Read all substitution variables for a given application. These control which period, year, scenario, and version the application uses.
List all applications in the Oracle EPM Cloud environment — Planning, FCCS, PCM, FreeForm, etc.
Execute a business rule (calculation script) in the EPM application. Returns a job ID you can poll for completion.
Output schemas completely undocumented. All tools return raw responses wrapped in generic { content: [{ type: 'text', text: ... }] } without any structure guidance. LLMs cannot reason about available fields, cannot chain tool outputs to subsequent calls, and must parse unstructured JSON text.
Parameter descriptions missing or minimal. Example: 'appName' parameter across 5 tools has description 'Application name (default: Vision)', this does not explain valid values, format, or constraints. Baseline shows 100% of A+ tools have detailed param descriptions; this server has ~30% coverage.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Update a substitution variable value. Example: roll CurrMonth from Mar to Apr during month-end close.
No error handling guidance. Tools return raw HTTP status codes and API responses. If a job fails, users see { status: 1, descriptiveStatus: 'Error', details: null } with no recovery path. Should include: 'Check application name with list_applications if not found. Verify business rule exists in EPM console if rule not found.'
No pagination support on list_applications. Returns entire list in one call with no limit parameter, no total count, no next_cursor. If an EPM environment has 100+ applications, response bloats context window.
No input validation or constraint documentation. export_data_slice accepts 6 optional string parameters with no enum constraints, format specs, or length limits. LLM could pass 'scenario=FakeScenario' and receive a cryptic API error instead of immediate feedback about valid values.
Destructive operations (run_business_rule, update_substitution_variable) lack confirmation or dry-run support. An agent executing update_substitution_variable CurrMonth from Mar to Apr will immediately apply the change with no preview or undo option. Should support a dry-run parameter or confirmation pattern.
check_job_status description does not document status codes (-1, 0, 1, 2) clearly. LLM must infer meaning from mock data. Should be explicit: 'Status code: -1=Processing, 0=Completed, 1=Error, 2=Cancelled. Call this tool in a loop until status is 0 or 1.'
Mock mode hard-coded with no way to verify schema against live API. 'epmFetch' function exists but is untested. If live API response differs from mock, tools will fail silently with no indication that response structure changed.