RE

Redfish MCP Server for AI-Driven Infrastructure Management

Manage Redfish-enabled infrastructure with an AI-driven MCP server using natural language to run agentic workflows and access structured and unstructured data.

Quick Install
npx -y @nokia/mcp-redfish

Overview

The Redfish MCP Server exposes infrastructure data over the Model Content Protocol (MCP) so AI agents and developer tools can interact with Redfish-enabled systems using natural language. It acts as a bridge between MCP clients (agentic or programmatic) and one or more Redfish endpoints, wrapping the Python Redfish library and translating agent requests into structured Redfish queries and responses.

This server is useful when you want to build AI-driven operational workflows (inventory, health checks, configuration queries, automation) that need structured access to servers, chassis, managers, and network interfaces without writing custom Redfish glue code. By integrating with MCP, the server lets agents request information with plain-language prompts while preserving the underlying Redfish structure for deterministic actions.

Features

  • Natural-language driven access to Redfish resources via MCP clients
  • Native MCP transport support (stdio, SSE, streamable-http)
  • Full Redfish coverage through the underlying python-redfish-library
  • Multi-host configuration: manage many Redfish endpoints from one MCP server
  • Per-host credentials and TLS settings
  • Discovery support to keep endpoint lists up-to-date
  • Logging and configuration validation at startup

Installation / Configuration

Get the source and install dependencies:

# Clone the repo
git clone https://github.com/nokia/mcp-redfish.git
cd mcp-redfish

# Install (recommended) or install dev deps
make install
# or for development
make install-dev

Run the server (common options):

# Run via console script (recommended)
uv run mcp-redfish
# or use the Makefile shortcut
make run-stdio

# As a module (useful for CI / development)
uv run python -m src.main

Configuration is done with environment variables. The primary variable is REDFISH_HOSTS (JSON array). Example .env:

# .env
REDFISH_HOSTS='[
  {"address":"192.168.1.100","username":"admin","password":"secret"},
  {"address":"192.168.1.101","port":8443}
]'
REDFISH_AUTH_METHOD=session
REDFISH_PORT=443
MCP_TRANSPORT=stdio
MCP_REDFISH_LOG_LEVEL=INFO

You can also export variables in your shell:

export REDFISH_HOSTS='[{"address":"127.0.0.1"}]'
export MCP_TRANSPORT=stdio

Environment variables (summary):

NamePurpose / NotesDefault
REDFISH_HOSTSJSON array of endpoints (per-host address, port, creds)required
REDFISH_PORTDefault port if not set per-host443
REDFISH_AUTH_METHODbasic or sessionsession
REDFISH_USERNAMEDefault username“”
REDFISH_PASSWORDDefault password“”
REDFISH_SERVER_CA_CERTPath to CA cert for TLS verificationnone
REDFISH_DISCOVERY_ENABLEDEnable periodic discovery of endpointsfalse
REDFISH_DISCOVERY_INTERVALDiscovery interval in seconds30
MCP_TRANSPORTMCP transport: stdio, sse, streamable-httpstdio
MCP_REDFISH_LOG_LEVELLogging levelINFO

Configuration validation performed at startup:

  • REDFISH_HOSTS must be valid JSON
  • Each host entry must include an address
  • Ports must be in the valid TCP range (1–65535)
  • TLS file paths and credentials are checked where applicable

Available Tools / Resources

The MCP server exposes a small set of tools (MCP actions) for clients to call:

  • list_endpoints

    • Returns the configured and discovered Redfish endpoints and basic metadata.
    • Example response (truncated):
    [
      {"id":"host-1","address":"192.168.1.100","status":"reachable"},
      {"id":"host-2","address":"192.168.1.101","status":"unreachable"}
    ]
    
  • get_resource_data

    • Fetches the JSON payload for a specific Redfish resource (System, Manager, EthernetInterface, etc).
    • Request example (MCP payload):
    {"host_id":"host-1","resource_path":"/redfish/v1/Systems/1/EthernetInterfaces/1"}
    
    • Response: raw Redfish JSON object for that resource.

Developer resources:

  • Repository: https://github.com/nokia/mcp-redfish
  • Underlying library: python-redfish-library (DMTF)

Use Cases

  1. Inventory and topology
  • Prompt: “List the available infrastructure components.”
  • What happens: An MCP client calls list_endpoints, then enumerates Systems and Chassis on reachable hosts and returns a structured list of component types, IDs, and links.
  1. Interface diagnostics
  • Prompt: “Get the ethernet interfaces of System X and show IP and MAC.”
  • What happens: The client resolves System X to a host and resource path, calls get_resource_data for each EthernetInterface, and extracts Address and MACAddress fields for a concise report.
  1. Health monitoring for automation agents
  • Scenario: An AI agent periodically asks for health summaries across all managers and chassis.
  • What happens: The agent uses list_endpoints to find reachable hosts, requests Redfish health properties (e.g., Health, Status) via get_resource_data, and generates alerts or remediation steps if needed.
  1. Interactive troubleshooting
  • Developer flow: Use the server over stdio or SSE from an agent framework to issue natural language questions and receive structured Redfish results without hand-coding each API call.

Notes for Developers

  • Treat REDFISH_HOSTS as the single source of truth for endpoints; discovery can augment but not replace deliberate configuration.
  • Use the MCP transport appropriate for your agent environment (stdio for local testing, SSE or streamable-http for browser/remote integrations).
  • The server returns raw Redfish JSON for deterministic automation; natural-language wrappers should interpret and summarize those payloads for human-readable output.

For additional examples and advanced configuration, see the examples and docs in the repository: https://github.com/nokia/mcp-redfish.