Prototype · Preview: every server in the official registry, synced every 30 minutes. Sign in with Google to write reviews.Prototype · updated every 30 min
PopNx MCPMCP servers for people who use AI · explained in plain words

Oracle Forms

by aoreshkovversion 0.20.0i★ 10iRuns on your computer
Registry nameio.github.aoreshkov/oracle-forms-mcp

How to install

What it does

Serves Oracle Forms module content (.fmb/.mmb/.pll/.olb) from a directory to MCP clients.

  • Connects Runs on your computer
  • Account or key No key needed
  • Category Docs, sheets & office work

Install

Pick the AI app you use, then copy the settings.

Passed 3/3 checks · Runs on your computer · ✓ Commands checked Nov 14, 2026

First: which AI do you use?

Pick your app and the steps appear below.

Works with Claude, with some setup first

No key, nothing to install · Only the Claude desktop app (Windows or Mac), not the web or phone

  1. Download the maker’s installer

    Download the maker’s .mcpb file

    The .mcpb file comes straight from the maker; we do not change it

  2. Double-click the file, then click Install in the Claude desktop app

  3. Try it

    Use Oracle Forms and tell me what you can do for me, then show me one thing

    ✓ If Claude says it is using Oracle Forms or shows a Oracle Forms tool in the answer, you are connected

3 optional setting(s) (works without them)

The command above works without these. Add them only if you want to change something, following the maker’s description.

  • OFMCP_CONVERTED_DIR Same as --converted-dir, for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_CONVERT_COMMAND Same as --convert-command — the whole command line, not just an executable — for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_COMPILE_COMMAND Same as --compile-command — the whole command line for converting .pll libraries — for clients that set environment variables rather than arguments. The flag wins when both are given.

Descriptions are as written by the maker.

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

ChatGPT cannot connect Oracle Forms yet

Oracle Forms runs on your computer, but ChatGPT can only connect servers that run on the web

What you can do instead

A · Use an app that can connect Oracle Forms

  • No key, nothing to install · Only the Claude desktop app (Windows or Mac), not the web or phone
  • Install Docker on your computer first (one time)
  • Install Docker on your computer first (one time)
  • Install Docker on your computer first (one time)

B · Others in Docs, sheets & office work that work with ChatGPT

Picked from the most used in the same category, only ones that connect by address with no key

Works with Claude Code, with some setup first

Install Docker on your computer first (one time)

Let AI install it

Copy this message into a Claude Code chat. The AI checks your computer, tells you which file it will change, and waits for your OK every time.

Please install the MCP server Oracle Forms for Claude Code on this computer, in this order: 1) Check Docker with docker --version. If it is missing, tell me to install it from https://www.docker.com/products/docker-desktop/; do not install it yourself. 2) Use only this config (already checked by PopNx MCP): claude mcp add --scope user oracle-forms -- docker run -i --rm ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0 --forms-dir /forms 3) Tell me the full path of the file you will change, or the command you will run, and wait for my OK. 4) No key is needed. 5) Do what we agreed, then check that the Oracle Forms tools really show up.

This message has no key in it. If a key is needed, the AI will ask you to paste it yourself into the file or the app’s field.

  1. Install Docker (if you don’t have it)

    Already installed? Check first · Open Terminal, type this command and press Enter

    docker --version
    • A version number such as Docker version … = installed, skip this step
    • "command not found" (on Windows: "is not recognized") = not installed yet, or installed but Terminal needs to be closed and reopened
    How to open Terminal

    Mac: press ⌘ + Space, type Terminal, press Enter

    Windows: open Start, type Windows PowerShell, then Open

    Not installed: Install Docker Desktop: on Mac open Docker.dmg and drag the icon to Applications (pick Apple silicon or Intel to match your Mac) · on Windows double-click Docker Desktop Installer.exe · then open the Docker Desktop app and leave it running. No curl command needed

    Open the Docker download page ↗

    When it’s done, close Terminal, open it again and run the same command. You should see a version number: docker --version

    Install once; it works for everything that needs Docker

  2. Open Terminal

    Mac: press Command+Space and type Terminal · Windows: open PowerShell

  3. Paste this command and press Enter

    claude mcp add --scope user oracle-forms -- docker run -i --rm ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0 --forms-dir /forms
  4. Type /mcp in Claude Code

    You should see Oracle Forms listed as connected

  5. Try it

    Use Oracle Forms and tell me what you can do for me, then show me one thing

    ✓ If Claude Code says it is using Oracle Forms or shows a Oracle Forms tool in the answer, you are connected

3 optional setting(s) (works without them)

The command above works without these. Add them only if you want to change something, following the maker’s description.

  • OFMCP_CONVERTED_DIR Same as --converted-dir, for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_CONVERT_COMMAND Same as --convert-command — the whole command line, not just an executable — for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_COMPILE_COMMAND Same as --compile-command — the whole command line for converting .pll libraries — for clients that set environment variables rather than arguments. The flag wins when both are given.

Descriptions are as written by the maker.

Menu names checked against Anthropic’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with Cursor, with some setup first

Install Docker on your computer first (one time)

Let AI install it

Copy this message into a Cursor chat. The AI checks your computer, tells you which file it will change, and waits for your OK every time.

Please install the MCP server Oracle Forms for Cursor on this computer, in this order: 1) Check Docker with docker --version. If it is missing, tell me to install it from https://www.docker.com/products/docker-desktop/; do not install it yourself. 2) Use only this config (already checked by PopNx MCP): { "mcpServers": { "oracle-forms": { "command": "docker", "args": [ "run", "-i", "--rm", "ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0", "--forms-dir", "/forms" ] } } } 3) Tell me the full path of the file you will change, or the command you will run, and wait for my OK. 4) No key is needed. 5) Do what we agreed, then check that the Oracle Forms tools really show up.

This message has no key in it. If a key is needed, the AI will ask you to paste it yourself into the file or the app’s field.

  1. Install Docker (if you don’t have it)

    Already installed? Check first · Open Terminal, type this command and press Enter

    docker --version
    • A version number such as Docker version … = installed, skip this step
    • "command not found" (on Windows: "is not recognized") = not installed yet, or installed but Terminal needs to be closed and reopened
    How to open Terminal

    Mac: press ⌘ + Space, type Terminal, press Enter

    Windows: open Start, type Windows PowerShell, then Open

    Not installed: Install Docker Desktop: on Mac open Docker.dmg and drag the icon to Applications (pick Apple silicon or Intel to match your Mac) · on Windows double-click Docker Desktop Installer.exe · then open the Docker Desktop app and leave it running. No curl command needed

    Open the Docker download page ↗

    When it’s done, close Terminal, open it again and run the same command. You should see a version number: docker --version

    Install once; it works for everything that needs Docker

  2. Click this button to open Cursor

    Open in Cursor

    Cursor asks you to confirm; click Install

  3. Open the AI chat in Cursor in Agent mode

  4. Try it

    Use Oracle Forms and tell me what you can do for me, then show me one thing

    ✓ If Cursor says it is using Oracle Forms or shows a Oracle Forms tool in the answer, you are connected

3 optional setting(s) (works without them)

The command above works without these. Add them only if you want to change something, following the maker’s description.

  • OFMCP_CONVERTED_DIR Same as --converted-dir, for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_CONVERT_COMMAND Same as --convert-command — the whole command line, not just an executable — for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_COMPILE_COMMAND Same as --compile-command — the whole command line for converting .pll libraries — for clients that set environment variables rather than arguments. The flag wins when both are given.

Descriptions are as written by the maker.

Menu names checked against Cursor’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Works with VS Code, with some setup first

Install Docker on your computer first (one time)

Let AI install it

Copy this message into a VS Code chat. The AI checks your computer, tells you which file it will change, and waits for your OK every time.

Please install the MCP server Oracle Forms for VS Code on this computer, in this order: 1) Check Docker with docker --version. If it is missing, tell me to install it from https://www.docker.com/products/docker-desktop/; do not install it yourself. 2) Use only this config (already checked by PopNx MCP): { "servers": { "oracle-forms": { "type": "stdio", "command": "docker", "args": [ "run", "-i", "--rm", "ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0", "--forms-dir", "/forms" ] } } } 3) Tell me the full path of the file you will change, or the command you will run, and wait for my OK. 4) No key is needed. 5) Do what we agreed, then check that the Oracle Forms tools really show up.

This message has no key in it. If a key is needed, the AI will ask you to paste it yourself into the file or the app’s field.

  1. Install Docker (if you don’t have it)

    Already installed? Check first · Open Terminal, type this command and press Enter

    docker --version
    • A version number such as Docker version … = installed, skip this step
    • "command not found" (on Windows: "is not recognized") = not installed yet, or installed but Terminal needs to be closed and reopened
    How to open Terminal

    Mac: press ⌘ + Space, type Terminal, press Enter

    Windows: open Start, type Windows PowerShell, then Open

    Not installed: Install Docker Desktop: on Mac open Docker.dmg and drag the icon to Applications (pick Apple silicon or Intel to match your Mac) · on Windows double-click Docker Desktop Installer.exe · then open the Docker Desktop app and leave it running. No curl command needed

    Open the Docker download page ↗

    When it’s done, close Terminal, open it again and run the same command. You should see a version number: docker --version

    Install once; it works for everything that needs Docker

  2. Click this button to open VS Code

    Open in VS Code

    VS Code asks you to confirm; click Install

  3. Open the AI chat in VS Code in Agent mode

  4. Try it

    Use Oracle Forms and tell me what you can do for me, then show me one thing

    ✓ If VS Code says it is using Oracle Forms or shows a Oracle Forms tool in the answer, you are connected

3 optional setting(s) (works without them)

The command above works without these. Add them only if you want to change something, following the maker’s description.

  • OFMCP_CONVERTED_DIR Same as --converted-dir, for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_CONVERT_COMMAND Same as --convert-command — the whole command line, not just an executable — for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_COMPILE_COMMAND Same as --compile-command — the whole command line for converting .pll libraries — for clients that set environment variables rather than arguments. The flag wins when both are given.

Descriptions are as written by the maker.

Menu names checked against VS Code’s help page on Nov 11, 2026 · your screen may differ slightly by app version

Other apps that use MCP, such as Windsurf, Zed or Gemini CLI, each add servers differently. See how in the app list.

See every app that uses MCP →

JSON settings are under “For developers” below

Stuck? Ask people who use Oracle Forms💬 Discussion →
For developers: Terminal commands and JSON settings

Installed on your computer

Claude Code

claude mcp add --scope user oracle-forms -- docker run -i --rm ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0 --forms-dir /forms

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "oracle-forms": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0",
        "--forms-dir",
        "/forms"
      ]
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "oracle-forms": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0",
        "--forms-dir",
        "/forms"
      ]
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "oracle-forms": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0",
        "--forms-dir",
        "/forms"
      ]
    }
  }
}

Values you fill in

  • OFMCP_CONVERTED_DIR env
    Same as --converted-dir, for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_CONVERT_COMMAND env
    Same as --convert-command — the whole command line, not just an executable — for clients that set environment variables rather than arguments. The flag wins when both are given.
  • OFMCP_COMPILE_COMMAND env
    Same as --compile-command — the whole command line for converting .pll libraries — for clients that set environment variables rather than arguments. The flag wins when both are given.

Descriptions are as written by the maker.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

At a glance

Downloads per weeki
Not on npm/PyPI
Licencei
Apache-2.0
Connection
Runs on your computer
Latest versioni
0.20.0
Published to registryi
Nov 7, 2026
Code last changedi
Nov 9, 2026
Maker
aoreshkov
Packages
oci: ghcr.io/aoreshkov/oracle-forms-mcp:0.20.0
mcpb: …/oracle-forms-mcp-0.20.0.mcpb
Website
github.com
Registry status
Active

Which apps can use it

Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.

Run on your computer in

ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast

All apps, with pros and cons →

Related guides

What it can do

Runs on your computer; the tool list appears in your AI app after you install it.

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 15, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account aoreshkov, which owns the repo

  • ✓ Pass

    Still maintained

    Code last changed 6 days ago

  • ✓ Pass

    Has a licence

    Uses Apache-2.0

  • – Not applicable

    Endpoint responds

    This one runs on your computer; there is no internet endpoint

  • – Not applicable

    Sign-in with OAuth

    Runs on your computer and uses local settings instead

  • … Not checked yet

    No hidden instructions in tool descriptions

    Runs on your computer; we can only read tool lists from internet endpoints

Published vulnerabilities (OSV.dev)

Not checked: only npm and PyPI packages with a version can be checked

What we check → · JSON

Makers: ask for a re-check or report wrong info

Discussion

Ask, share a tip or report that it does not work. Sorted by what people marked helpful.

No posts yet. Be the first to ask or share.

Posts here are written by users, not the PopNx team.

Sign in to post

User reviews

No reviews yet

Sign in to write a review

Compared with others in Docs, sheets & office worki

  • More stars than 94% of the other 3955 servers in this category
  • Published to the registry more recently than 78% of the other 3955 servers in this category
  • Basic checks equal to or better than 100% of the other 3955 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Oracle Forms safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).

Is it still maintained?

The GitHub repo last changed 6 days ago, and the latest version (0.20.0) reached the registry 8 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Docker, MCPB on your computer.

What can I use instead?

In the same category: Puter MCP, XcodeBuildMCP, Anki MCP Server, Sosumi, Zapier

Similar alternatives

Same category, other makers, commands already checked. Official ones first, then by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Puter MCP

Puter MCP enables AI tools to interact with Puter: manage files, websites, workers, and more

by HeyPuterWidely used★ 44.2KUpdated 5 months ago

Runs in the cloud✓ service owner · puter.com

XcodeBuildMCP

XcodeBuildMCP provides tools for Xcode project management, simulator management, and app utilities.

by getsentryWidely used↓ 130.5K/wk shared package★ 6.6KUpdated 4 months ago

Runs on your computer✓ service owner · xcodebuildmcp.com

Anki MCP Server

MCP server for Anki flashcards: adaptive review, notes, media, and deck management via AnkiConnect.

by ankimcpGrowing↓ 1.1K/wk★ 558Updated 41 days ago

Runs on your computer✓ service owner · ankimcp.ai

Sosumi

Search and read Apple developer documentation, HIG, and WWDC transcripts as Markdown.

by NSHipsterGrowing★ 492Updated 6 days ago

Runs in the cloud✓ service owner · sosumi.ai

Zapier

Connects AI to thousands of apps through one Zapier server, such as Gmail, Google Sheets and Slack. You choose which actions the AI may use.

by zapierGrowing★ 459Updated 4 months ago

Runs in the cloud✓ service owner · zapier.com
  • Puter MCP — Runs in the cloud, nothing to install · No key needed
  • XcodeBuildMCP — Installs on your computer · No key needed
  • Anki MCP Server — Installs on your computer · No key needed
  • Sosumi — Runs in the cloud, nothing to install · No key needed
  • Zapier — Runs in the cloud, nothing to install · No key needed · In Claude’s directory

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

Oracle Forms MCP

An MCP server that serves the content of Oracle Forms modules (.fmb forms, .mmb menus, .pll PL/SQL libraries, .olb object libraries) found in a directory, so AI assistants can inspect blocks, items, triggers, program units, and raw object XML without opening Forms Builder.

Built as a Kotlin Multiplatform core (pure @Serializable models and ports) with a JVM MCP server on top: declarative tool adapters over a single FormsService, stdio and HTTP transports, and a fingerprint-based on-disk cache. Oracle tool conversion feeds a streaming StAX parser that turns Forms XML into a structured index.

Why

Oracle Forms applications from the 1990s–2000s are still running critical business processes, but their logic is locked inside binary .fmb/.pll modules that only Forms Builder can open. That makes them opaque to modern AI tooling and painful to review, document, or migrate.

Oracle Forms MCP turns those modules into structured, queryable content so an AI assistant can:

  • Understand a legacy app — enumerate blocks, items, triggers, and program units without a Forms IDE.
  • Review & document PL/SQL — pull decoded trigger and program-unit bodies straight into the model's context.
  • Assist modernization — feed decades-old business logic to an assistant for migration to APEX, Java, or a rewrite, and search across every module's source.
  • Capture & retain knowledge — let the assistant record notes, tags, and cross-references on individual elements that persist across sessions and re-indexing, building up a durable map of a form no one fully remembers.

It is aimed at developers and teams doing Oracle Forms modernization, reverse engineering, code review, and documentation — anyone who needs to read Forms logic faster than opening it by hand.

See it work

A typical session against the bundled sample-forms directory:

You:  What does ORDERS.fmb do?

AI → list_modules → ORDERS.fmb (NOT_CACHED), MAINMENU.mmb, UTILS.pll … AI → fetch_module ORDERS.fmb → converted + indexed (3 blocks, 3 triggers, 3 program units) AI → get_module_overview ORDERS → blocks, triggers, LOVs, record groups, windows, canvases … You: Show me the validation logic on the ORDERS block. AI → list_triggers block=ORDERS → WHEN-VALIDATE-ITEM (on ORDER_ID), WHEN-VALIDATE-RECORD AI → get_trigger ORDERS WHEN-VALIDATE-ITEM → the decoded PL/SQL body You: Where else is the CALC_TOTAL procedure called? AI → search_source "calc_total" scope=plsql → hits across triggers and program units You: That validation is the legacy pre-2010 path — note it so we remember. AI → annotate_element ORDERS trigger WHEN-VALIDATE-ITEM kind=note "Legacy pre-2010 validation path" → saved (next session) get_trigger ORDERS WHEN-VALIDATE-ITEM → body + the stored note inline

How it works

  1. list_modules scans the configured --forms-dir (non-recursive) and reports each module's cache status: NOT_CACHED, CACHED, STALE (source changed on disk), or SOURCE_MISSING. A production forms directory holds thousands of modules, so the answer is filtered and paged: narrow with pattern/type/status, follow nextCursor for the rest, and read countsByStatus for the shape of the whole match.
  2. fetch_module produces the module's text form in the cache and indexes it:
  • `ORACLE_HOME` set — binaries are converted with the Oracle tools in %ORACLE_HOME%\bin (then $FORMS_INSTANCE/bin, where Linux Forms 12c+ keeps frmf2xml.sh): frmf2xml for .fmb/.mmb/.olb (XML), frmcmp_batch (Module_Type=LIBRARY Script=YES) for .pll (a .pld text dump).
  • `ORACLE_HOME` not set — pre-converted files are expected next to the modules (orders_fmb.xml, dupes_fmb.xml, picker_fmb.xml, toolbar_fmb.xml, mainmenu_mmb.xml, objects_olb.xml, utils.pld) and copied into the cache.
  1. A single StAX pass parses the XML into a structured index (blocks with items, triggers with decoded PL/SQL, program units, LOVs, record groups, windows, canvases, …). PL/SQL bodies are extracted to .sql sidecar files; every named XML element gets a line-range reference so get_object_xml can slice it back out of the converted file.
  2. The other tools read the cached index. Caching is fingerprint-based (size + mtime + sha256 of the source file): editing a module marks it STALE and read tools ask for a re-fetch.
  3. annotate_element and relate_elements let the assistant write durable meta-information back about individual elements (notes, tags, summaries, classifications, cross-references). This is kept in a separate store — not the derived index — so it survives re-fetching, and the read tools surface it inline. An annotation made before a source change is flagged, never dropped.

Tools

ToolWhat it returns
list_modulesModules in the forms dir with type, size, and cache status; filter by pattern/regex, type, status and page via limit/cursor
fetch_moduleConverts + indexes one module (idempotent; force=true converts a current one again; progress notifications)
get_module_overviewNames of every section + counts — the first call after a fetch (verbosity=detailed adds window and canvas objects)
list_blocksBlocks with base table, item count, trigger count
get_blockOne block: items with type, property class, prompt and trigger names, and its master-detail relations (verbosity=detailed adds data type, column, canvas, size, visible/required/LOV and the DML properties resolved through each item's property class; columns=true adds the base table's columns and the ones no item supplies); flags subclassed blocks/items
list_triggersTriggers with level/scope; filter by block, item, or level (verbosity=detailed adds a PL/SQL preview)
get_triggerOne trigger's decoded PL/SQL body (same-named triggers told apart by ownerPath or level); resolve follows a subclassing pointer into a cached parent module
list_program_unitsProcedures, functions, package specs/bodies with line counts
get_program_unitOne program unit's PL/SQL (disambiguate spec/body via unitType); resolve as for get_trigger
search_sourceLine search over one fetched module: extracted PL/SQL (plsql), the raw XML (xml), or both; paginated via offset/nextOffset
search_modulesThe same search across every cached module — cross-form calls, shared :GLOBALs, subclassing pointers; reports the modules it could not reach; paged via an opaque cursor
read_sourceA line range of a cached file, by uri (which names its module) or module + file — the converted XML or an extracted PL/SQL sidecar
get_object_xmlThe raw XML fragment of any named object — the escape hatch

Every tool checks its arguments against its own input schema before running. An argument it does not have is never silently dropped: the call fails with every problem listed at once (unknown arguments with the name most likely meant, missing ones with their permitted values, values outside an enum), plus an example call where the tool has one.

Where an object's meaning lives

Two Forms properties carry more meaning than anything else in a module, and both used to be reachable only one get_object_xml call at a time.

An item's property class is usually its role: Forms shops name their classes for what the object does, so a push button is an *LOV* button and a text item is a *filter* field only because of the class it inherits. get_block reports propertyClass on every item and block, confirmed against the classes the module actually declares.

A window's modality decides how a form is read — a modal window is a dialog, so the code that fills it and the code that consumes the result sit on opposite sides of one interaction. get_module_overview(verbosity: "detailed") returns the window and canvas objects behind two of its name lists: modality, size, toolbar canvases, and the window each canvas sits on.

A property Forms did not write comes back as null, meaning the object keeps the Forms default — never false. On an item that has a property class it does not even mean the default: the class supplies the value, and in a real form that is where most of an item's behaviour lives. So get_block(verbosity: "detailed") returns both — items[].dml, what the item itself wrote, and effectiveDml, the same properties with the class applied (item, then class, then whatever that class is based on, followed into other modules that are already fetched). An item is listed in effectiveDml only when that chain resolved to the end, so a null there really is the Forms default. Every other item is a row of unresolvedItems, with the reason and — when fetching fixes it — the module to fetch; propertyClasses and the result's hint give the same account per class and name the fetch_module call. items: [...] narrows all of it to the items a question is about.

get_block(columns: true) adds the block's data-source columns, the columns no item supplies, and which of those are mandatory in the database — the ones an insert fails on unless a trigger assigns them.

A block's master-detail relations decide what it can be queried through, so get_block serves them at every verbosity: block.relations, the relations it is the master of (join condition, deferred, autoQuery, deleteRecord, preventMasterlessOperations), and detailOf, the relations that name it as their detail, with the master each is written on. A detail with preventMasterlessOperations cannot be queried except through its master — which the form enforces, not the database, so a port has to enforce it itself.

Reading around a result

Everything indexed is a line range into a file the cache owns, and those ranges used to name a path with no way to resolve it. Every result that points at a file now carries a source:

"source": {

"uri": "oracleforms://ORDERS.fmb/plsql/triggers/ORDERS.ORDER_ID.WHEN-VALIDATE-ITEM.sql", "file": "plsql/triggers/ORDERS.ORDER_ID.WHEN-VALIDATE-ITEM.sql", "startLine": 1, "endLine": 3 }

read_source takes either form back, so a search hit can be read in context and a truncated fragment continued. The same files are readable as MCP resources — oracleforms://{module}/converted for the converted text form and oracleforms://{module}/plsql/{category}/{name} for one extracted block of PL/SQL — and every such result also carries a resource_link content block, so a client can follow it without parsing JSON. Reads are capped by lines *and* characters; a cut resource read says so in the text it returns and names the call that continues it.

Paths stay cache-relative and URIs stay layout-independent: an absolute host path would mean nothing to a client talking to the container image or over HTTP.

Subclassed (inherited) objects

Forms lets a block, item, trigger or program unit be subclassed from a

Only the beginning is shown; read the rest in the repo