Fusion MCP
Click on "Install 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., "@Fusion MCPfind tables related to purchase orders"
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.
Fusion MCP — Oracle Fusion ERP Cloud MCP Server
A local stdio MCP server (Python, FastMCP) that gives an LLM client (Claude Desktop / Claude Code) read-only access to an Oracle Fusion / ERP Cloud database — discover objects, describe tables, read source, and run SELECT queries — all via the BI Publisher SOAP API (no direct DB connection required).
Architecture
Claude Desktop / Claude Code (MCP stdio)
│
▼
Fusion MCP Server (Python, FastMCP)
Tools ──► SQL guard ──► BIP client (requests + SOAP)
│
Catalog SQL builders (ALL_OBJECTS, ALL_TAB_COLUMNS, …)
│
▼
Oracle Fusion — BI Publisher web services
ExternalReportWSSService (runReport → base64 CSV)
│
▼
FUSION schema + ALL_* data dictionaryPrerequisites
1 — Fusion BIP service account
Create (or identify) a Fusion user that:
Has the BI Publisher role (
BIPAdministratoror a custom role with BIP access).Has read-only access on the FUSION schema and the Oracle data dictionary (
SELECT_CATALOG_ROLEequivalent, or appropriate Fusion data roles).Will be used as
FUSION_USER/FUSION_PASSWORDin.env.
This is the primary security boundary — the app-layer SQL guard enforces
SELECT/WITH only, but the BIP service account must also be read-only at
the database level.
2 — Python 3.11+
Install uv or use pip.
Setup (local development)
# Clone the repo
git clone https://github.com/ramesharavapally/FUSION-MCP.git
cd FUSION-MCP
# Install (editable + dev deps)
uv pip install -e ".[dev]"
# Copy and fill in credentials
cp .env.example .env
# Edit .env: set FUSION_BASE_URL, FUSION_USER, FUSION_PASSWORDRunning the server
# From a local clone
uv run fusion-mcp
# Or directly from GitHub without cloning (production use)
uvx --from git+https://github.com/ramesharavapally/FUSION-MCP.git fusion-mcpDeploying the SQL-runner report
The server does not deploy any BIP artifacts — you set up the report manually in the BI Publisher catalog before running the server.
The query is sent as a base64-encoded bind parameter named query1 (not a
lexical &query1). This is deliberate: passing raw SQL as a lexical value trips
BIP's SQL-injection guard (SQLInjection Error: Invalid parameter value …), and
on Fusion SaaS that guard can't be disabled. Base64-encoding keeps the parameter
value free of SQL keywords, and a PL/SQL data model decodes it and opens a cursor.
Create a CSV-output report over a data model whose dataset is this PL/SQL block:
DECLARE
TYPE refcursor IS REF CURSOR;
xdo_cursor REFCURSOR;
l_query VARCHAR2(32000);
FUNCTION get_query(p_query IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN utl_raw.cast_to_varchar2(
utl_encode.base64_decode(utl_raw.cast_to_raw(p_query)));
END;
BEGIN
l_query := get_query(:query1);
OPEN :xdo_cursor FOR l_query;
END;The server base64-encodes each query and strips any trailing ; before sending
(the decoded statement must not carry a semicolon, since it is opened as a
cursor). Then point the server at the report:
# .env
FUSION_REPORT_PATH=/your/existing/report/path.xdoTests
# Unit tests — no Fusion connection required
uv run pytest
# Single test file
uv run pytest tests/test_sql_guard.pyMCP Inspector (interactive tool testing)
npx @modelcontextprotocol/inspector uv run fusion-mcpRegister with Claude Desktop
Add to claude_desktop_config.json (typically at
%APPDATA%\Claude\claude_desktop_config.json on Windows or
~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"fusion-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/ramesharavapally/FUSION-MCP.git",
"fusion-mcp"
],
"env": {
"FUSION_BASE_URL": "https://<pod>.fa.ocs.oraclecloud.com",
"FUSION_USER": "your_bip_service_user",
"FUSION_PASSWORD": "your_password",
"FUSION_MAX_ROWS": "100",
"LOG_LEVEL": "INFO"
}
}
}
}uvx fetches the package directly from GitHub and runs it in an isolated
environment — no local clone or pip install needed. Claude Desktop
re-uses the cached environment on subsequent starts; to pick up a new
commit, restart Claude Desktop (uvx re-checks the git ref on each cold
start).
Tip: pin to a specific commit or tag for stability:
"git+https://github.com/ramesharavapally/FUSION-MCP.git@v1.0.0"
Available MCP tools
Tool | Description |
| Search |
| Find tables/views by name or comment |
| Find tables by column name or column comment |
| Full-text search across |
| Full column/PK/index/stats description of a table or view |
| Read full source of a procedure/function/package from |
| Discover argument names, types, and directions from |
| List all subprograms inside a package |
| Run a read-only |
Note:
call_procedureis not available in Fusion MCP. Oracle BIP executes SELECT data models only — anonymous PL/SQL blocks are not supported. Useget_procedure_signatureandread_object_sourcefor procedure discovery.
Security model
SQL guard (
safety/sql_guard.py) — rejects anything that is not a singleSELECT/WITH; blocks;chaining; validates identifiers used in catalog SQL. This is the app-layer boundary.BIP data model — the deployed report decodes the base64
query1bind parameter and opens it as a cursor (OPEN … FOR), which only executes a single query; multi-statement/DML text cannot be smuggled through this path.Service account — the BIP user should have read-only database grants (see prerequisites above). This is the ultimate security boundary.
Configuration reference
Variable | Default | Description |
| — | Fusion pod URL, e.g. |
| — | BIP service account username |
| — | BIP service account password |
|
| BIP catalog path for the manually-deployed report |
|
| Maximum rows returned per query |
|
| HTTP timeout for BIP calls (seconds) |
|
| Logging level (DEBUG, INFO, WARNING, ERROR) |
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ramesharavapally/FUSION-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server