Oracle Forms — MCP server for Claude Code: read .fmb and .pll
Hands your assistant the contents of Oracle Forms modules — blocks, triggers, PL/SQL — so you can read the logic without Forms Builder.
claude mcp add --env OFMCP_CONVERTED_DIR=<OFMCP_CONVERTED_DIR> --env OFMCP_CONVERT_COMMAND=<OFMCP_CONVERT_COMMAND> --env OFMCP_COMPILE_COMMAND=<OFMCP_COMPILE_COMMAND> --transport stdio oracle-forms -- docker run -i --rm -e OFMCP_CONVERTED_DIR -e OFMCP_CONVERT_COMMAND -e OFMCP_COMPILE_COMMAND ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0What Oracle Forms does
The server walks a directory of .fmb, .mmb, .pll and .olb modules and builds a structured index out of them. From there the assistant lists blocks, items, triggers and program units, pulls decoded PL/SQL bodies, and slices raw object XML by line range. No Forms Builder involved.
Conversion takes one of two routes. With ORACLE_HOME set, binaries go through the tools in %ORACLE_HOME%\bin: frmf2xml handles forms, menus and object libraries, while frmcmp_batch with Module_Type=LIBRARY Script=YES produces a .pld dump for .pll. Without ORACLE_HOME, pre-converted files such as orders_fmb.xml or utils.pld have to sit next to the modules — otherwise there is nothing to index. Check that first.
Caching keys off a fingerprint: file size, mtime and sha256. Edit a module and it flips to STALE, at which point read tools ask for a re-fetch. Notes and cross-references written about individual elements live in a separate store, so they survive re-indexing; an annotation made before the source changed gets flagged rather than dropped.
What it helps with
- read the logic of a legacy
.fmbwithout Forms Builder - pull a trigger body into the model's context
- find every call site of a procedure across modules
- document blocks and program units of a form
- keep notes about elements across sessions
Example prompts for the agent
- What does
ORDERS.fmbdo? Give me the module overview. - Show the validation logic on the ORDERS block — the WHEN-VALIDATE-ITEM trigger.
- Where else is CALC_TOTAL called? Search the PL/SQL.
How to install Oracle Forms
Platform CLI
claude mcp add --env OFMCP_CONVERTED_DIR=<OFMCP_CONVERTED_DIR> --env OFMCP_CONVERT_COMMAND=<OFMCP_CONVERT_COMMAND> --env OFMCP_COMPILE_COMMAND=<OFMCP_COMPILE_COMMAND> --transport stdio oracle-forms -- docker run -i --rm -e OFMCP_CONVERTED_DIR -e OFMCP_CONVERT_COMMAND -e OFMCP_COMPILE_COMMAND ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0Replace <…> with your own values
Platform CLI
codex mcp add oracle-forms --env OFMCP_CONVERTED_DIR=<OFMCP_CONVERTED_DIR> --env OFMCP_CONVERT_COMMAND=<OFMCP_CONVERT_COMMAND> --env OFMCP_COMPILE_COMMAND=<OFMCP_COMPILE_COMMAND> -- docker run -i --rm -e OFMCP_CONVERTED_DIR -e OFMCP_CONVERT_COMMAND -e OFMCP_COMPILE_COMMAND ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0Replace <…> with your own values
Config file
{
"mcpServers": {
"oracle-forms": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OFMCP_CONVERTED_DIR",
"-e",
"OFMCP_CONVERT_COMMAND",
"-e",
"OFMCP_COMPILE_COMMAND",
"ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0"
],
"env": {
"OFMCP_CONVERTED_DIR": "<OFMCP_CONVERTED_DIR>",
"OFMCP_CONVERT_COMMAND": "<OFMCP_CONVERT_COMMAND>",
"OFMCP_COMPILE_COMMAND": "<OFMCP_COMPILE_COMMAND>"
}
}
}
}Replace <…> with your own values
Config file
{
"servers": {
"oracle-forms": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"OFMCP_CONVERTED_DIR",
"-e",
"OFMCP_CONVERT_COMMAND",
"-e",
"OFMCP_COMPILE_COMMAND",
"ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0"
],
"env": {
"OFMCP_CONVERTED_DIR": "<OFMCP_CONVERTED_DIR>",
"OFMCP_CONVERT_COMMAND": "<OFMCP_CONVERT_COMMAND>",
"OFMCP_COMPILE_COMMAND": "<OFMCP_COMPILE_COMMAND>"
}
}
}
}Replace <…> with your own values
Platform CLI
gemini mcp add -e OFMCP_CONVERTED_DIR=<OFMCP_CONVERTED_DIR> -e OFMCP_CONVERT_COMMAND=<OFMCP_CONVERT_COMMAND> -e OFMCP_COMPILE_COMMAND=<OFMCP_COMPILE_COMMAND> oracle-forms docker run -i --rm -e OFMCP_CONVERTED_DIR -e OFMCP_CONVERT_COMMAND -e OFMCP_COMPILE_COMMAND ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0Replace <…> with your own values
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Oracle Forms
How do I install Oracle Forms in Claude Code?
Run `claude mcp add --env OFMCP_CONVERTED_DIR=<OFMCP_CONVERTED_DIR> --env OFMCP_CONVERT_COMMAND=<OFMCP_CONVERT_COMMAND> --env OFMCP_COMPILE_COMMAND=<OFMCP_COMPILE_COMMAND> --transport stdio oracle-forms -- docker run -i --rm -e OFMCP_CONVERTED_DIR -e OFMCP_CONVERT_COMMAND -e OFMCP_COMPILE_COMMAND ghcr.io/aoreshkov/oracle-forms-mcp:0.15.0`. Replace the placeholders with your own values.
What does Oracle Forms MCP do?
It reads Oracle Forms modules from a directory and exposes their contents to the assistant: blocks, items, triggers, program units, LOVs and record groups. It also searches module source and lets you attach notes to individual elements.
Do I need Oracle Forms installed for the server to work?
Either ORACLE_HOME with the frmf2xml and frmcmp_batch tools, or pre-converted files placed next to the modules. With neither, there is nothing to index.