oracle-unshipped-orders-mcp
Click on "Deploy 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., "@oracle-unshipped-orders-mcpshow unshipped orders for customer CUST001"
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.
Oracle Unshipped Orders MCP Server
MCP (Model Context Protocol) server for retrieving unshipped orders from Oracle/Red Prairie Blue Yonder WMS database.
๐ Security Features
Environment Variables: All credentials stored in
.env(git-ignored)Connection Pooling: Efficient database connection management
No Hardcoded Credentials: Zero credentials in source code
Oracle Best Practices: Uses oracledb official driver with secure connection handling
Related MCP server: iqms-mcp
๐ Quick Start
1. Install Dependencies
cd oracle-unshipped-orders-mcp
npm install2. Configure Database Credentials
IMPORTANT: Create a .env file (this file is git-ignored and will NOT be committed):
cp .env.example .envEdit .env and add your actual Oracle credentials:
ORACLE_USER=your_actual_username
ORACLE_PASSWORD=your_actual_password
ORACLE_CONNECTION_STRING=your_host:1521/your_service_nameExample:
ORACLE_USER=wmsuser
ORACLE_PASSWORD=SecureP@ssw0rd123
ORACLE_CONNECTION_STRING=db.bolthousefresh.com:1521/REDPRAIRIE3. Build the Project
npm run build4. Test the MCP Server
npm testThe server will:
โ Connect to your Oracle database
โ Initialize connection pool
โ Start the MCP server on stdio
โ Be ready to accept tool calls
๐ ๏ธ Available Tools
get_unshipped_orders
Retrieves all unshipped orders for a specific customer.
Input:
stcust(string, required): Ship-to Customer ID
Output:
{
"success": true,
"customer": "CUST001",
"total_orders": 5,
"orders": [
{
"ORDNUM": "ORD12345",
"WH_ID": "DC01",
"STCUST": "CUST001",
"BTCUST": "CUST001",
"BT_ADR_ID": "ADDR001",
"ADDDTE": "2026-06-25",
"EXPSHIP": "2026-07-02",
"APPTTIME": "10:00",
"CPONUM": "PO98765",
"PRTNUM": "PART123",
"ORDQTY": 100,
"ORDLIN": 1,
"INPQTY": 100,
"PCKQTY": 100,
"STGQTY": 100,
"SHPQTY": 0
}
]
}Query Logic:
Filters orders with
shpqty = 0(zero shipped quantity)Includes orders with
dispatch_dte is null(not yet dispatched)Excludes alcohol items (
non_alc_flg = 0)Joins truck dispatch details for expected ship dates and appointment times
๐ Project Structure
oracle-unshipped-orders-mcp/
โโโ src/
โ โโโ index.ts # Main MCP server code
โโโ dist/ # Compiled JavaScript (generated)
โโโ package.json # Dependencies and scripts
โโโ tsconfig.json # TypeScript configuration
โโโ .env.example # Template for credentials (safe to commit)
โโโ .env # YOUR ACTUAL CREDENTIALS (git-ignored)
โโโ .gitignore # Protects sensitive files
โโโ README.md # This file๐ Security Checklist
Before committing to GitHub:
โ
.envfile is listed in.gitignoreโ No credentials in source code
โ Only
.env.example(with placeholders) is committedโ Verify:
git statusshould NOT show.env
๐ข Deployment to Railway
Option 1: Railway CLI
railway login
railway init
railway upIn Railway dashboard, add environment variables:
ORACLE_USERORACLE_PASSWORDORACLE_CONNECTION_STRING
Option 2: GitHub Integration
Push code to GitHub (credentials are git-ignored)
Connect Railway to your GitHub repo
Add environment variables in Railway dashboard
Deploy automatically on push
๐งช Testing Locally with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsThis opens a web interface where you can:
Test the
get_unshipped_orderstoolInspect requests/responses
Debug connection issues
๐ SQL Query Details
The MCP executes this query (with customer filter):
SELECT o.ordnum, o.wh_id, o.stcust, o.btcust, o.bt_adr_id,
o.adddte, dtl.expship, mst.appttime, o.cponum,
ol.prtnum, ol.ordqty, ol.ordlin,
sl.inpqty, sl.pckqty, sl.stgqty, sl.shpqty
FROM ord o
INNER JOIN ord_line ol ON o.wh_id = ol.wh_id AND o.ordnum = ol.ordnum
INNER JOIN shipment_line sl ON ol.wh_id = sl.wh_id AND ol.ordnum = sl.ordnum
AND ol.ordlin = sl.ordlin AND ol.ordsln = sl.ordsln
INNER JOIN shipment shp ON sl.wh_id = shp.wh_id AND sl.ship_id = shp.ship_id
INNER JOIN stop stp ON shp.stop_id = stp.stop_id
INNER JOIN car_move car ON stp.car_move_id = car.car_move_id
INNER JOIN trlr trl ON car.trlr_id = trl.trlr_id
INNER JOIN usrtruckdspdetail dtl ON dtl.ordnum = o.ordnum AND dtl.wh_id = o.wh_id
INNER JOIN usrtruckdspmaster mst ON mst.wh_id = dtl.wh_id AND mst.mstordnum = dtl.mstordnum
WHERE trl.dispatch_dte IS NULL
AND sl.shpqty = 0
AND ol.non_alc_flg = 0
AND o.stcust = :stcust
ORDER BY o.ordnum, ol.ordlin๐ Troubleshooting
"Database pool not initialized"
Check
.envfile exists and has correct credentialsVerify Oracle connection string format:
host:port/service_name
"ORA-12154: TNS:could not resolve the connect identifier"
Verify
ORACLE_CONNECTION_STRINGformatCheck network connectivity to Oracle server
Ensure firewall allows connection on Oracle port (usually 1521)
"ORA-01017: invalid username/password"
Double-check credentials in
.envVerify user has SELECT privileges on required tables
No results returned
Verify customer ID (
stcust) exists in databaseCheck if customer has unshipped orders matching the criteria
Test query directly in SQL*Plus or SQL Developer
๐ References
๐ค Author
Rakesh - Sr. Systems Programmer/Analyst
New Carrot Farms LLC dba Bolthouse Fresh Foods
This server cannot be deployed
Maintenance
Related MCP Connectors
TOTVS Protheus ERP for AI: stock, sales, orders, customers and MRP. Read-only, official API.
WMS & logistics intelligence: live freight & shipping rates, port data, inventory, fleet, KPIs
Query your SourceMedium commerce warehouse, Shopify stores, and ad accounts.
Read-only zobrx e-commerce data: P&L, orders, inventory, marketplace, tax & shelf insights.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with Oracle databases through MCP by executing SELECT queries, describing table structures, and listing available tables with secure, read-only access.37 npm2MIT
- FlicenseCqualityAmaintenanceMCP server for IQMS / DELMIAworks (EnterpriseIQ) โ read manufacturing ERP data via Oracle and post transactional updates via the WebAPI module.16-
- FlicenseNot gradedqualityBmaintenanceEnables querying customer orders from a PostgreSQL database by customer ID or email, with optional minimum amount filtering.-
- FlicenseNot gradedqualityCmaintenanceEnables querying Proluxe ERP data such as customers, orders, invoices, AR aging, bills of materials, product catalog, focus priorities, and projects through MCP tools.-