Oracle MCP Server

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

Local serverstdio

What is the Oracle MCP server?

Serves Oracle Forms module content (.fmb/.mmb/.pll/.olb) from a directory to MCP clients. That is what the oracle mcp server brings to an AI assistant: the same capability, reachable through the Model Context Protocol rather than a separate app or dashboard.

The short version

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.

  • 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,
  • Capture & retain knowledge — — let the assistant record notes, tags, and cross-references on

The tools it exposes

The server publishes 13 tools. What each one is for:

  • list_modules — Every module in the forms dir with type, size, and cache status
  • fetch_module — Converts + indexes one module (idempotent; progress notifications)
  • get_module_overview — Names of every section + counts — the first call after a fetch
  • list_blocks — Blocks with base table, item count, trigger count
  • get_block — One block in full: items (type, column, canvas, prompt) + trigger names
  • list_triggers — Triggers with level/scope; filter by block, item, or level (verbosity=detailed adds a PL/SQL preview)
  • get_trigger — One trigger's decoded PL/SQL body
  • list_program_units — Procedures, functions, package specs/bodies with line counts
  • get_program_unit — One program unit's PL/SQL (disambiguate spec/body via unitType)
  • search_source — Line search over extracted PL/SQL (plsql), the raw XML (xml), or both; paginated via offset/nextOffset
  • get_object_xml — The raw XML fragment of any named object — the escape hatch
  • Annotations — Meta-information the assistant records back about an element rather than reads from it — semantic notes, tags, classifications, and

Getting it running

Installation goes through your MCP client rather than a global install: point it at ghcr.io/aoreshkov/oracle-forms-mcp on a container image and it is fetched when the client starts. The copy-paste blocks for Claude Desktop, Claude Code and Cursor are further down this page.

What it needs from you

Configuration is passed through the environment: ORDER_ID, FORMS_PATH. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.

How it compares

Plenty of database access servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. Oracle's toolset — list_modules, fetch_module, get_module_overview and 10 more — is a fair guide to whether it matches your workflow. It is maintained by aoreshkov; worth a glance at recent repository activity before you build anything load-bearing on it.

SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.

Things to watch

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 13 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Oracle.
  • Keep per-call confirmation enabled while you learn its behaviour; it is the cheapest safeguard you have.

Available tools

ToolWhat it does
list_modulesEvery module in the forms dir with type, size, and cache status
fetch_moduleConverts + indexes one module (idempotent; progress notifications)
get_module_overviewNames of every section + counts — the first call after a fetch
list_blocksBlocks with base table, item count, trigger count
get_blockOne block in full: items (type, column, canvas, prompt) + trigger names
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
list_program_unitsProcedures, functions, package specs/bodies with line counts
get_program_unitOne program unit's PL/SQL (disambiguate spec/body via unitType)
search_sourceLine search over extracted PL/SQL (plsql), the raw XML (xml), or both; paginated via offset/nextOffset
get_object_xmlThe raw XML fragment of any named object — the escape hatch
AnnotationsMeta-information the assistant records back **about** an element rather than reads *from* it — semantic notes, tags, classifications, and cross-reference relations. It is persisted in a durable store, kept separate from
OptionsThe Options tool exposed by this server.

How to install the Oracle MCP server

{
  "mcpServers": {
    "oracle-forms": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/aoreshkov/oracle-forms-mcp"],
      "env": {
        "ORDER_ID": "your-value",
        "FORMS_PATH": "your-value"
      }
    }
  }
}

Add to claude_desktop_config.json, then restart Claude Desktop.

Configuration

VariableDescriptionRequired
ORDER_IDConfiguration value read at startup.Optional
FORMS_PATHFilesystem location the server is allowed to use.Optional

Example prompts to try

  • Use Oracle to list modules.
  • Use Oracle to fetch module.
  • Use Oracle to get module overview.

Frequently asked questions

It connects Oracle to MCP-compatible AI assistants such as Claude and Cursor, exposing 13 tools (list_modules, fetch_module, get_module_overview, and more) that the assistant can call on your behalf. Instead of copying data back and forth by hand, the assistant works with Oracle directly.