Redfish MCP Server
It is an MCP server that lets AI agents query and interact with Redfish-enabled infrastructure using natural language through MCP clients.
Ask natural-language questions about infrastructure components, such as “list available servers” or “get ethernet interface data for component X”
List all configured Redfish servers with
list_serversReview SSDP-discovered Redfish endpoint candidates (review-only, not managed) with
list_discovered_serversFetch any Redfish resource’s JSON data by URL using
get_resource_dataWorks with any MCP client, including Claude Desktop, VS Code, and mcphost
Supports multiple transports: stdio, SSE, and streamable-http
Wraps the Python Redfish library for full Redfish API support
Supports multiple Redfish endpoints, basic/session authentication, per-host credentials, and TLS certificate verification
Enables AI assistants, chatbots, and agentic workflows to retrieve infrastructure data for monitoring and troubleshooting
Integrates with GitHub Copilot to provide access to Redfish-managed infrastructure data, allowing queries about components and their interfaces.
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., "@Redfish MCP ServerList available Redfish endpoints"
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.
Redfish MCP Server
Overview
The Redfish MCP Server is a natural language interface designed for agentic applications to efficiently manage infrastructure that exposes Redfish API for this purpose. It integrates seamlessly with MCP (Model Content Protocol) clients, enabling AI-driven workflows to interact with structured and unstructured data of the infrastructure. Using this MCP Server, you can ask questions like:
"List the available infrastructure components"
"Get the data of ethernet interfaces of the infrastructure component X"
Related MCP server: Hyperfabric MCP Server
Features
Natural Language Queries: Enables AI agents to query the data of infrastructure components using natural language.
Seamless MCP Integration: Works with any MCP client for smooth communication.
Full Redfish Support: It wraps the Python Redfish library
Tools
This MCP Server provides tools to manage the data of infrastructure via the Redfish API.
list_serversto query the Redfish API endpoints that are configured for the MCP Server.list_discovered_serversto review Redfish endpoints discovered via SSDP. Discovered endpoints are candidates only and are not managed until explicitly added toREDFISH_HOSTS.get_resource_datato read the data of a specific resource (e.g. System, EthernetInterface, etc.)
Quick Start
# Clone and setup
git clone <repository-url>
cd mcp-redfish
make install # or 'make dev' for development setup
# Option 1: Run with console script (recommended)
uv run mcp-redfish
# OR use Makefile shortcut:
make run-stdio
# Option 2: Run as module (development/CI)
uv run python -m src.mainInstallation
Follow these instructions to install the server.
# Clone the repository
git clone <repository-url>
cd mcp-redfish
# Install dependencies using uv
make install
# Or install with development dependencies
make install-devConfiguration
The Redfish MCP Server uses environment variables for configuration. The server includes comprehensive validation to ensure all settings are properly configured.
Environment Variables
Name | Description | Default Value | Required |
| JSON array of Redfish endpoint configurations |
| Yes |
| Default port for Redfish API (used when not specified per-host) |
| No |
| Authentication method: |
| No |
| Default username for authentication |
| No |
| Default password for authentication |
| No |
| Path to CA certificate for server verification |
| No |
| Verify Redfish server TLS certificates |
| No |
| Enable SSDP discovery of review-only endpoint candidates |
| No |
| Discovery interval in seconds |
| No |
| Transport method: |
| No |
| Require MCP client authentication on HTTP transports |
| No |
| Warned break-glass setting for non-loopback SSE |
| No |
|
|
| HTTP if |
| Clock skew for JWT |
| No |
| Required issuer in an active introspection response | unset | Introspection |
| Required MCP resource audience in an introspection response | unset | Introspection |
| Explicitly trust a private IdP HTTPS endpoint and internal DNS/routing |
| No |
| HTTP bind address. Unset/empty → this project binds | (unset → | No |
| Exact client-facing hosts; required for off-loopback Streamable HTTP | FastMCP default | Non-loopback Streamable HTTP |
| PEM server certificate for in-process HTTPS | unset | With key, for HTTP TLS |
| PEM private key for in-process HTTPS | unset | With cert, for HTTP TLS |
| Assert TLS is terminated in front of this MCP Server |
| HTTP + auth + non-loopback without certs |
| Logging level: |
| No |
REDFISH_HOSTS Configuration
The REDFISH_HOSTS environment variable accepts a JSON array of endpoint configurations. Each endpoint can have the following properties:
[
{
"address": "192.168.1.100",
"port": 443,
"username": "admin",
"password": "password123",
"auth_method": "session",
"tls_server_ca_cert": "/path/to/ca-cert.pem",
"tls_verify": true
},
{
"address": "192.168.1.101",
"port": 8443,
"username": "operator",
"password": "secret456",
"auth_method": "basic"
}
]Per-host properties:
address(required): IP address or hostname of the Redfish endpointport(optional): Port number (defaults to globalREDFISH_PORT)username(optional): Username (defaults to globalREDFISH_USERNAME)password(optional): Password (defaults to globalREDFISH_PASSWORD)auth_method(optional): Authentication method (defaults to globalREDFISH_AUTH_METHOD)tls_server_ca_cert(optional): Path to CA certificate (defaults to globalREDFISH_SERVER_CA_CERT)tls_verify(optional): Verify the server TLS certificate (defaults to globalREDFISH_TLS_VERIFY, which defaults totrue)
TLS Certificate Verification
Redfish HTTPS connections verify the server certificate by default. If no custom CA certificate is configured, the server uses its default trusted CA certificate bundle.
For Redfish endpoints that use certificates signed by a private CA, configure the CA bundle globally:
REDFISH_SERVER_CA_CERT=/path/to/ca-bundle.pemor per host:
[
{
"address": "bmc.example.com",
"tls_server_ca_cert": "/path/to/ca-bundle.pem"
}
]When a custom CA file is configured, it is used as the trust bundle for that connection. It replaces the default trusted CA certificate bundle. Ensure the certificate hostname or IP address matches the configured address value.
For lab or troubleshooting environments, TLS certificate verification can be explicitly disabled globally with REDFISH_TLS_VERIFY=false or per host with "tls_verify": false. Disabling verification keeps the HTTPS connection encrypted, but the server identity is not authenticated. Use this only when you explicitly trust the network and endpoint.
Discovery and Trust
SSDP discovery is disabled by default. When enabled, discovered Redfish endpoints are treated as review-only candidates. They are returned by list_discovered_servers with both the SSDP packet source address and the advertised Redfish service-root URI, including parsed host, port, and scheme details.
Discovered candidates are not returned by list_servers and are not used by get_resource_data. To manage a discovered endpoint or send credentials to it, explicitly add the trusted endpoint to REDFISH_HOSTS.
Configuration Methods
There are several ways to set environment variables:
Using a
.envFile (Recommended): Place a.envfile in your project directory with key-value pairs for each environment variable. This is secure and convenient, keeping sensitive data out of version control.# Copy the example configuration cp .env.example .env # Edit the .env file with your settings nano .envExample
.envfile:# Redfish endpoint configuration REDFISH_HOSTS='[{"address": "192.168.1.100", "username": "admin", "password": "secret123"}, {"address": "192.168.1.101", "port": 8443}]' REDFISH_AUTH_METHOD=session REDFISH_USERNAME=default_user REDFISH_PASSWORD=default_pass REDFISH_TLS_VERIFY=true # MCP configuration MCP_TRANSPORT=stdio MCP_REDFISH_LOG_LEVEL=INFOHTTP transports require MCP authentication. See the authentication guide for JWT and introspection. See the HTTP deployment guide for bind addresses, Host/Origin protection, TLS, containers, and Kubernetes.
Setting Variables in the Shell: Export environment variables directly in your shell before running the application:
export REDFISH_HOSTS='[{"address": "127.0.0.1"}]' export MCP_TRANSPORT="stdio" export MCP_REDFISH_LOG_LEVEL="DEBUG"
Configuration Validation
The server performs comprehensive validation on startup:
JSON Syntax:
REDFISH_HOSTSmust be valid JSONRequired Fields: Each host must have an
addressfieldPort Ranges: Ports must be between 1 and 65535
Authentication Methods: Must be
basicorsessionTransport Types: Must be
stdio,sse, orstreamable-httpLog Levels: Must be
DEBUG,INFO,WARNING,ERROR, orCRITICAL
If validation fails, the server reports the specific error as a single Configuration error: … line and exits with a non-zero status — no traceback, and no fallback parser: a configuration the validator rejects never starts the server with substituted defaults. A server that fails to start for any other reason also exits non-zero, so a supervisor restarts it instead of treating it as healthy.
A few FastMCP-native settings that would weaken these controls are refused at startup. See the authentication guide and HTTP deployment guide.
Breaking change: earlier releases logged a deprecation warning and continued with lenient legacy parsing, which could silently replace a malformed REDFISH_HOSTS with 127.0.0.1, force REDFISH_TLS_VERIFY back to enabled, or pass an unrecognised MCP_TRANSPORT straight through to the server. All of those now abort. Fix the reported variable rather than relying on the old defaults.
Running the Server
The MCP Redfish server supports multiple execution methods:
Console Script (Recommended)
# For end users and production deployments
uv run mcp-redfishModule Execution
# For development and CI/CD environments
uv run python -m src.mainMakefile Targets
# Development shortcuts
make run-stdio # Run with stdio transport
make run-sse # SSE: fails closed unless MCP auth env is set
make run-streamable-http # Preferred HTTP transport; same auth rule
make inspect # Run with MCP InspectorTransports
The transport is how an MCP client connects to this server:
stdiostarts the server as a local child process.streamable-httpaccepts network connections and is the preferred remote option.sseis an older HTTP option with fewer browser-security protections.
Breaking change: HTTP MCP transports (sse, streamable-http) now require authentication. Set MCP_AUTH_MODE (and the matching MCP_AUTH_* variables), or set MCP_HTTP_AUTH=false to keep unauthenticated HTTP. stdio is unchanged. See README and the release notes.
The authentication operator guide includes a plain-English setup guide and definitions for terms such as JWT, IdP, JWKS, audience, introspection, and SSRF. The HTTP deployment guide covers bind addresses, Host/Origin protection, TLS, containers, and Kubernetes.
stdio Transport (Default)
The MCP client starts this server and communicates through the process's standard input and output. It does not open an HTTP port. MCP HTTP authentication does not apply.
Do not use another tool to expose this local connection over unauthenticated HTTP.
# Set transport mode
export MCP_TRANSPORT="stdio"
# Console script execution
uv run mcp-redfish
# Module execution (for CI/CD)
uv run python -m src.mainstreamable-http Transport (preferred HTTP)
Breaking change: this transport will not start unless MCP_AUTH_MODE is configured or MCP_HTTP_AUTH=false.
export MCP_TRANSPORT=streamable-http
# Production-shaped: JWT (see docs/MCP_AUTH.md)
export MCP_AUTH_MODE=token
export MCP_AUTH_JWT_JWKS_URI=https://idp.example.com/.well-known/jwks.json
export MCP_AUTH_JWT_ISSUER=https://idp.example.com/
export MCP_AUTH_JWT_AUDIENCE=mcp-redfish
make run-streamable-httpLab only (unauthenticated HTTP):
export MCP_TRANSPORT=streamable-http
export MCP_HTTP_AUTH=false # logs a warning; any client that can reach this MCP Server can call tools
make run-streamable-httpClients send Authorization: Bearer <token> when auth is enabled. A request without a token is rejected:
curl -i http://127.0.0.1:8000/mcp
HTTP/1.1 401 Unauthorizedcurl -i -H "Authorization: Bearer <jwt>" http://127.0.0.1:8000/mcpSSE Transport (Server-Sent Events)
Breaking change: same authentication rule as streamable-http. Non-loopback SSE is refused by default because Host/Origin protection is a Streamable HTTP feature. Prefer streamable-http for remote use.
export MCP_TRANSPORT="sse"
export MCP_AUTH_MODE=token
# ... JWT variables as above ...
# Loopback SSE needs no extra setting. A legacy non-loopback deployment also
# needs the warned break-glass setting MCP_ALLOW_REMOTE_SSE=true.
make run-sseTest the SSE server with a token:
curl -i -H "Authorization: Bearer <jwt>" http://127.0.0.1:8000/sseWithout a token (auth enabled):
curl -i http://127.0.0.1:8000/sse
HTTP/1.1 401 UnauthorizedIf FASTMCP_HOST is unset, the process binds 127.0.0.1. Off-loopback HTTP with auth requires cert/key or MCP_TLS_TERMINATED=true.
Off-loopback Streamable HTTP also defaults to strict Host/Origin protection and
requires exact client-facing names in FASTMCP_HTTP_ALLOWED_HOSTS; wildcard
patterns are refused.
Integrate with your favorite tool or client. VS Code / GitHub Copilot HTTP (not a naked URL):
"mcp": {
"servers": {
"redfish-mcp": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp",
"headers": {
"Authorization": "Bearer ${input:mcp-redfish-token}"
}
}
}
}Lab HTTP without a token is MCP_HTTP_AUTH=false on loopback only. stdio remains the recommended VS Code path.
Integration with Claude Desktop
Manual configuration
You can configure Claude Desktop to use this MCP Server.
Retrieve your
uvcommand full path (e.g.which uv)Edit the
claude_desktop_config.jsonconfiguration fileon a MacOS, at
~/Library/Application\ Support/Claude/
{
"mcpServers": {
"redfish": {
"command": "<full_path_uv_command>",
"args": [
"--directory",
"<your_mcp_server_directory>",
"run",
"mcp-redfish"
],
"env": {
"REDFISH_HOSTS": "[{\"address\": \"192.168.1.100\", \"username\": \"admin\", \"password\": \"secret123\"}]",
"REDFISH_AUTH_METHOD": "session",
"MCP_TRANSPORT": "stdio",
"MCP_REDFISH_LOG_LEVEL": "INFO"
}
}
}
}Note: You can also use module execution by changing the args to ["run", "python", "-m", "src.main"] if needed for development or troubleshooting.
Troubleshooting
You can troubleshoot problems by tailing the log file.
tail -f ~/Library/Logs/Claude/mcp-server-redfish.logIntegration with VS Code
To use the Redfish MCP Server with VS Code, you need:
Enable the agent mode tools. Add the following to your
settings.json:
{
"chat.agent.enabled": true
}Add the Redfish MCP Server configuration to your
mcp.jsonorsettings.json:
// Example .vscode/mcp.json
{
"servers": {
"redfish": {
"type": "stdio",
"command": "<full_path_uv_command>",
"args": [
"--directory",
"<your_mcp_server_directory>",
"run",
"mcp-redfish"
],
"env": {
"REDFISH_HOSTS": "[{\"address\": \"192.168.1.100\", \"username\": \"admin\", \"password\": \"secret123\"}]",
"REDFISH_AUTH_METHOD": "session",
"MCP_TRANSPORT": "stdio"
}
}
}
}// Example settings.json
{
"mcp": {
"servers": {
"redfish": {
"type": "stdio",
"command": "<full_path_uv_command>",
"args": [
"--directory",
"<your_mcp_server_directory>",
"run",
"mcp-redfish"
],
"env": {
"REDFISH_HOSTS": "[{\"address\": \"192.168.1.100\", \"username\": \"admin\", \"password\": \"secret123\"}]",
"REDFISH_AUTH_METHOD": "session",
"MCP_TRANSPORT": "stdio"
}
}
}
}
}Note: For development or troubleshooting, you can use module execution by changing the last arg from "mcp-redfish" to "python", "-m", "src.main".
For more information, see the VS Code documentation.
Integration with mcphost
mcphost is a command-line host application that manages connections between language models and MCP servers. It acts as the host in the MCP client-server architecture, enabling LLM applications to access external tools, maintain consistent context, and execute commands safely.
mcphost supports a wide range of language models:
Anthropic Claude: Claude 3.5 Sonnet, Claude 3.5 Haiku, and other Claude models
OpenAI: GPT-4, GPT-4 Turbo, GPT-3.5, and compatible models
Google Gemini: Gemini 2.0 Flash, Gemini 1.5 Pro, and other Gemini models
Ollama: Any Ollama-compatible model with function calling support
Custom APIs: Any OpenAI-compatible API endpoint
Example Configuration using locally hosted models
Create a configuration file at ~/.config/mcphost/mcp-redfish.yaml:
mcpServers:
redfish:
type: local
command: ["python3", "-m", "src.main"]
environment:
REDFISH_HOSTS: "[{\"address\": \"<host1>\", \"username\": \"<user1>\", \"password\": \"<pass1>\"}, {\"address\": \"<host2>\", \"username\": \"<user2>\", \"password\": \"<pass2>\"}]"
REDFISH_AUTH_METHOD: "session"
MCP_TRANSPORT: "stdio"
MCP_REDFISH_LOG_LEVEL: "INFO"Replace the placeholder values (<host1>, <user1>, <pass1>, etc.) with actual Redfish endpoint details.
Usage Examples
Local Models with Ollama:
# Using Ollama models
mcphost -m ollama:llama3 --config ~/.config/mcphost/mcp-redfish.yaml
mcphost -m ollama:mistral --config ~/.config/mcphost/mcp-redfish.yaml
mcphost -m ollama:qwen3 --config ~/.config/mcphost/mcp-redfish.yamlFor detailed information and advanced configuration options, visit the mcphost GitHub repository.
Testing
Interactive Testing
You can use the MCP Inspector for visual debugging of this MCP Server.
# Recommended: Makefile shortcut (uses pinned Inspector from e2e/inspector-version.lock)
make inspect
# Using console script
INSPECTOR="$(uv run python -c "from e2e.inspector_version import load_inspector_package_spec; print(load_inspector_package_spec())")"
npx "$INSPECTOR" uv run mcp-redfish
# Using module execution (for development)
npx "$INSPECTOR" uv run python -m src.mainInspector minor/patch updates are automated weekly; see e2e/inspector-version.toml.
End-to-End Testing
For comprehensive testing, including testing against a real Redfish API, the project includes an e2e testing environment using the DMTF Redfish Interface Emulator:
# Quick start - run all e2e tests
make e2e-test
# Or step by step:
make e2e-emulator-setup # Set up emulator and certificates
make e2e-emulator-start # Start Redfish Interface Emulator
make e2e-test-framework # Run comprehensive tests with Python framework (recommended)
make e2e-emulator-stop # Stop emulatorNote: The old target names (e.g.,
make e2e-setup,make e2e-start) are still supported for backward compatibility, but the new emulator-specific names are recommended for clarity.
The e2e tests provide:
Redfish Interface Emulator: Simulated Redfish API for testing
SSL/TLS Support: Self-signed certificates for HTTPS testing
CI/CD Integration: Automated testing on pull requests
Local Development: Full testing environment on your machine
For detailed e2e testing documentation, see E2E_TESTING.md.
Container Runtime Support
The project supports both Docker and Podman as container runtimes:
Auto-Detection: Automatically detects and uses available container runtime
Docker: Uses optimized Dockerfile with BuildKit cache mounts when available
Podman: Uses compatible Dockerfile without cache mounts for broader compatibility
Manual Override: Force specific runtime with
CONTAINER_RUNTIMEenvironment variable
# Auto-detect (default)
make container-build
# Force Docker
CONTAINER_RUNTIME=docker make container-build
# Force Podman
CONTAINER_RUNTIME=podman make container-build
# Or use convenience target
make podman-buildUnit Testing
Run the standard test suite:
make test # Run tests
make test-cov # Run with coverage
make check # Quick lint + testExample Use Cases
AI Assistants: Enable LLMs to fetch infrastructure data via Redfish API.
Chatbots & Virtual Agents: Retrieve data, and personalize responses.
Development
Prerequisites
Python 3.14 recommended (3.13 is deprecated and will be removed in a future release)
uv for package management
Setup
# Clone the repository
git clone <repository-url>
cd mcp-redfish
# Install development environment (includes dependencies + pre-commit hooks)
make dev
# Or install components separately:
make install-dev # Install development dependencies
make pre-commit-install # Set up pre-commit hooksDevelopment Workflow
The project includes a comprehensive Makefile with 42+ targets for development:
# Code quality
make lint # Run ruff linting
make format # Format code with ruff
make type-check # Run MyPy type checking
make test # Run pytest tests
make security # Run bandit security scan
# Development servers
make run-stdio # Run with stdio transport
make run-sse # SSE (will not start without MCP auth env)
make run-streamable-http # Preferred HTTP transport (same auth rule)
make inspect # Run with MCP Inspector
# All-in-one commands
make all-checks # Run full quality suite (lint, format, type-check, security, pre-commit)
make check # Quick check: linting and tests only
make pre-commit-run # Run all pre-commit checksCode Organization
src/
├── main.py # Entry point and console script
├── common/ # Shared utilities
│ ├── __init__.py # Package exports
│ ├── config.py # Configuration management
│ └── hosts.py # Host discovery and validation
└── tools/ # MCP tool implementations
├── __init__.py
├── redfish_tools.py # Core Redfish operations
└── tool_registry.py # Tool registrationExecution Patterns
Console Script:
uv run mcp-redfish(recommended for users)Module Execution:
uv run python -m src.main(for development/CI)Direct Python:
python src/main.py(basic execution)
Testing
# Run all tests
make test
# Run with coverage
make test-cov
# Run specific test files (manual uv command needed)
uv run pytest tests/test_config.py -v
# Integration testing with MCP Inspector
make inspectPre-commit Hooks
The project uses pre-commit hooks for code quality:
ruff: Linting and formatting
mypy: Type checking
Custom checks: Import sorting, trailing whitespace
Type System
Uses modern Python 3.13+ built-in types (
dict,list) instead oftyping.Dict,typing.ListComprehensive type annotations with MyPy strict mode
Return type annotations for all functions
For more details, see the Makefile targets: make help
Available Tools
3 toolsget_resource_dataA
Given a Redfish resource URL (e.g., 'https:///redfish/v1'), fetches and returns its data as JSON. To construct a valid Redfish resource URL as input, use the following url schema 'https:///redfish/v1/'.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The Redfish URL to access the resource. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool fetches data as JSON, but it does not mention potential errors, authentication requirements, rate limits, or side effects. The description is adequate for a simple read operation but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, immediately stating the purpose and providing a usage example. It is concise, front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the return format is covered elsewhere. The description explains what the tool does and how to construct URLs. However, it lacks details on error handling, connectivity requirements, or whether the tool requires authentication, leaving minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds valuable context by providing an example URL and explaining how to construct valid input. This goes beyond the schema description, aiding correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool fetches data from a Redfish resource URL and returns it as JSON. It provides an example URL format, making the purpose unambiguous. The sibling tool 'list_servers' is distinct, likely for listing servers, so this tool is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a specific Redfish resource URL, but it does not explicitly state when to use this tool versus alternatives like 'list_servers' or when not to use it. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_discovered_serversA
List discovered Redfish server candidates for review.
Returns: list: A list of discovered Redfish server candidates. These candidates are informational only and are not managed unless explicitly configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that results are informational only and not managed, which implies a non-mutating, safe listing operation. This is meaningful behavioral context, though it does not mention permission requirements or side-effect absence explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The purpose is front-loaded, and the return-value clarification adds necessary context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool, the description is complete: it names the resource, states the output type, and clarifies that the listed candidates are not managed. Nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is no parameter semantics burden on the description. Baseline 4 is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List'), a clear resource ('discovered Redfish server candidates'), and a review purpose. It also distinguishes these from managed servers by stating they are 'informational only and are not managed unless explicitly configured,' differentiating it from likely sibling tools like list_servers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the intended context: listing discovered candidates for review before they are managed. It does not explicitly name alternatives or exclusion criteria, but the 'not managed' phrase provides practical guidance on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serversA
List configured Redfish servers that can be managed.
Returns: list: A list of configured Redfish servers that can be managed
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It states that the tool returns a list, which implies a read-only operation, but it does not explicitly disclose behavior beyond that, such as whether discovery is required first, whether authentication is needed, or any side effects. The output schema covers the return shape but not behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action and resource, but it repeats the same idea in the Returns line almost verbatim. The redundancy adds no information and could be tightened to a single sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema, the description is nearly complete: it names the resource and its scope. It could be improved by explicitly referencing the sibling list_discovered_servers, but the 'configured' qualifier already provides enough context for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is no parameter documentation burden on the description. The baseline of 4 applies because nothing is missing; there is nothing for the description to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a specific resource ('configured Redfish servers'), and a filtering criterion ('that can be managed'), which clearly distinguishes it from the sibling list_discovered_servers. An agent can infer which tool to use for configured vs discovered servers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the word 'configured' contrasting with the sibling list_discovered_servers, but the description does not explicitly state when to choose this tool over alternatives or mention any exclusions. It provides just enough signal for an agent to infer the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.4.2- Added
list_discovered_servers
2 tool updates
v0.1.0- First observed
get_resource_data - First observed
list_servers
TDQS
get_resource_data is clearly distinct from the server listing tools. list_servers and list_discovered_servers could be confused by name alone, but their descriptions clarify configured versus discovered candidates.
All tool names use a consistent lowercase snake_case verb_noun pattern: list_servers, list_discovered_servers, get_resource_data. The naming is predictable and easy to navigate.
Three tools is on the low end of a reasonable range, and each tool serves a clear purpose. However, for a Redfish server, the surface feels thin and suggests a narrow read-only/discovery scope rather than full management.
The toolset supports listing servers, viewing discovered candidates, and fetching resource data, but lacks tools for configuring discovered servers, managing server lifecycle, or performing Redfish update/action operations. This leaves significant gaps for typical management workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Unified API to query AWS, GCP, Azure and generate Terraform/CLI execution kits for AI agents.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to manage HPE OneView infrastructure through the REST API, including server hardware operations, power control, profile management, and network/storage configuration.-
- AlicenseBqualityDmaintenanceEnables LLMs to interact with Hyperfabric infrastructure management APIs, providing access to 79 endpoints for managing fabrics, devices, networks, VNIs, VRFs, and other network infrastructure components.792MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Redfish-compliant BMC devices for server management, firmware updates, and hardware monitoring through session-based authentication and standardized API endpoints.1MIT
- FlicenseCqualityDmaintenanceEnables AI agents and LLMs to control and monitor Redfish-enabled hardware through power operations, system inventory, event logs, health monitoring, sensor readings, and user account management.151-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/nokia/mcp-redfish'
If you have feedback or need assistance with the MCP directory API, please join our Discord server