OME MCP — Dell OpenManage Enterprise MCP Server
A Model Context Protocol (MCP) server that exposes Dell OpenManage Enterprise (OME) management capabilities to AI agents via a Streaming HTTP transport. No direct iDRAC connections are made — all data flows through OME's REST API.
---
Features
| Tool | Description | |------|-------------| | ome_list_devices | List all managed devices with OData filter + pagination | | ome_get_device | Full detail for one device by ID | | ome_get_device_inventory | Hardware inventory (CPU/RAM/NIC/HDD/PSU) | | ome_get_device_subsystem_health | Per-subsystem health status | | ome_get_device_network_adapters | NIC/port details | | ome_device_power_action | PowerOn/Off/Restart/Cycle via OME | | ome_list_groups | List device groups | | ome_get_group_devices | Devices in a specific group | | ome_list_alerts | Alerts with severity/status filter | | ome_acknowledge_alerts | Acknowledge one or more alerts | | ome_list_jobs | List jobs with filter | | ome_get_job | Job detail and status | | ome_run_job_now | Trigger an existing job immediately | | ome_get_job_execution_history | Job run history | | ome_list_discovery_jobs | Discovery configuration groups | | ome_create_discovery_job | Create & start a discovery scan | | ome_list_firmware_catalogs | Firmware update catalogs | | ome_list_firmware_baselines | Firmware compliance baselines | | ome_get_firmware_baseline_compliance | Per-component compliance report | | ome_list_templates | Configuration/deployment templates | | ome_get_template | Template details | | ome_list_config_baselines | Configuration compliance baselines | | ome_get_config_baseline_compliance | Per-device config compliance | | ome_get_system_info | OME version, license, health | | ome_list_active_sessions | Active OME API sessions | | ome_get_audit_logs | OME audit trail | | ome_get_warranty_info | Device warranty records | | ome_refresh_device_inventory | Trigger OME inventory refresh |
---
Architecture
AI Agent / MCP Client
│
│ HTTP POST /mcp (Streaming HTTP transport)
▼
┌─────────────────────┐
│ ome_mcp_v5 │ Docker container (Ubuntu/Python 3.11)
│ FastMCP server │
│ port 8000 │
└────────┬────────────┘
│ HTTPS REST API calls
▼
┌─────────────────────┐
│ OME Appliance │ https://192.168.1.145/api
│ (192.168.1.145) │
└────────┬────────────┘
│ OME manages iDRAC internally
▼
Dell PowerEdge Servers
No connections are made directly to iDRAC — OME handles that internally.
---
Prerequisites
- Docker Engine 24+ and Docker Compose v2 on an Ubuntu host
- Network access from the host to
https://192.168.1.145(OME appliance) - OME admin credentials
---
Quick Start
1. Clone / copy project files
2. Configure credentials
cd ome-mcp
cp .env.example .env
nano .env # Set OME_USER, OME_PASSWORD
Never commit .env to version control.
3. Start container
docker compose up -d
The MCP endpoint will be available at http://<host>:8000/mcp.
Service Based Install
Build the image
./service_control.sh build
Start the server
./service_control.sh start
The MCP endpoint will be available at http://<host>:8000/mcp.
Check status
./service_control.sh status
./service_control.sh logs 50
Auto-start with systemd (optional)
# Install systemd unit (auto-updates WorkingDirectory to current path)
sudo ./service_control.sh install-systemd
# Start now
sudo systemctl start ome_mcp_v5
# View logs
sudo journalctl -u ome_mcp_v5 -f
To remove the systemd unit:
sudo ./service_control.sh uninstall-systemd
---
TLS / SSL Toggle
| Scenario | Setting in .env | |----------|-------------------| | Lab / self-signed cert | OME_VERIFY_SSL=false | | Production (trusted CA) | OME_VERIFY_SSL=true | | Production (custom CA bundle) | OME_VERIFY_SSL=/path/to/ca-bundle.crt |
No rebuild is required — just change the env var and restart.
---
Connecting an MCP Client
Point any MCP-compatible client at:
http://<host_ip>:8000/mcp
Example with mcp CLI:
mcp call --url http://192.168.1.200:8000/mcp ome_list_devices '{"top":10}'
Example with Python SDK:
from mcp.client.streamable_http import streamablehttp_client
from mcp import ClientSession
async with streamablehttp_client("http://192.168.1.200:8000/mcp") as (r, w, _):
async with ClientSession(r, w) as session:
await session.initialize()
result = await session.call_tool("ome_list_devices", {"top": 5})
print(result.content)
---
Pagination
All list tools accept top (page size, default 50) and skip (offset) parameters. Use the returned next_skip value to fetch subsequent pages:
{"top": 25, "skip": 0} // first page
{"top": 25, "skip": 25} // second page
OData Filtering
Pass standard OData $filter expressions via the filter parameter:
"Model eq 'PowerEdge R640'"
"Severity eq 'Critical'"
"LastRunStatus/Name eq 'Failed'"
"StatusType eq 'New'"
---
Security Notes
- Credentials are stored in
.env(owner-read-only, not version-controlled). - The server runs as a non-root user (
mcpuser, UID 1000) inside the container. - Credentials are never logged.
- For production, set
OME_VERIFY_SSL=trueand use a valid TLS certificate on OME. - The MCP endpoint itself is plain HTTP on port 8000; place a reverse proxy (nginx/caddy)
with TLS in front of it if external exposure is required.
---
Troubleshooting
Container won't start: ``bash ./service_control.sh logs ``
Authentication errors:
- Verify
OME_USER/OME_PASSWORDin.env - Confirm OME is reachable:
curl -k https://192.168.1.145/api/SessionService/Sessions
SSL errors:
- Set
OME_VERIFY_SSL=falsefor self-signed certs - Restart after changing:
./service_control.sh restart
Tools return empty results:
- Devices may not be discovered yet — use
ome_create_discovery_job - Check OME permissions for the API account
---
Adding New Tools
- Add a Pydantic
Inputmodel inome_mcp_server.py - Add a function decorated with
@mcp.tool(name="ome_your_tool") - Call
_ome_get/_ome_postas appropriate - Rebuild:
./service_control.sh rebuild && ./service_control.sh restart
---
License
MIT License — see LICENSE file.
---












