DISCLAIMER: This is a community-maintained project and is not officially affiliated with, endorsed by, or supported by IBM. This MCP server utilizes the IBM Storage Insights External APIs.
This open-sourced Model Context Protocol (MCP) server will help IBM Storage Insights to integrate in the Agentic-AI ecosystem. It will help users to bring their AI-Agents for seamless observability and diagnosis of their Storage Assets registered with IBM Storage Insights .
- Observability Tools: Leverage key IBM Storage Insights monitoring capabilities via an MCP interface.
- Extensible Design: Easily integrate additional Storage Insights APIs for future expansions.
- Pythonic: Allowing ease of use and extension for AI developers
Listed below are the tools which are presently exposed thought the MCP server:
- Description: Retrieve a list of alerts for a tenant.
- Inputs:
tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: List of alerts present for the tenant.
- Examples:
# Example 1: Fetch alerts using default tenant ID from .env "Get all alerts for my tenant" # Example 2: Fetch alerts for a specific tenant "Show me alerts for tenant ID 01f13d45-27fd-1e2d-1234-66e2fdea0987" # Example 3: Check critical alerts "What are the current alerts on my storage systems?"
- Description: Retrieve a list of notifications for a tenant.
- Inputs:
tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: List of notifications present for the tenant.
- Examples:
# Example 1: Get all notifications using default tenant "Show me all notifications for my tenant" # Example 2: Fetch notifications for specific tenant "Get notifications for tenant 01f13d45-27fd-1e2d-1234-66e2fdea0987" # Example 3: Check recent notifications "What notifications do I have on my storage infrastructure?"
- Description: Get all storage systems added to the tenant for monitoring tenant.
- Inputs:
tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: List of storage systems present on the tenant.
- Examples:
# Example 1: List all storage systems "Show me all storage systems in my tenant" # Example 2: Get storage systems for specific tenant "List storage systems for tenant 01f13d45-27fd-1e2d-1234-66e2fdea0987" # Example 3: Check available systems "What storage systems are being monitored?"
- Description: Get notifications of system under the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: List of notifications for a system represented by unique system id.
- Examples:
# Example 1: Get notifications for a specific system "Show notifications for system 5249e140-3d44-11f1-8e40-a94d2a0672fd" # Example 2: Check system-specific notifications "What notifications exist for storage system 5249e140-3d44-11f1-8e40-a94d2a0672fd?" # Example 3: Get notifications for system in specific tenant "Get notifications for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in tenant 01f13d45-27fd-1e2d-1234-66e2fdea0987"
- Description: Get details for given system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: Details of a system represented by unique system id.
- Examples:
# Example 1: Get complete details of a system "Show me details for storage system 5249e140-3d44-11f1-8e40-a94d2a0672fd" # Example 2: Check system configuration "What are the details of system 5249e140-3d44-11f1-8e40-a94d2a0672fd?" # Example 3: Get system info for specific tenant "Get details for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in tenant 01f13d45-27fd-1e2d-1234-66e2fdea0987"
- Description: Get io rate for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested IO Rate for the given system represented by unique system id.
- Supported IO rate metrics
volume_overall_read_io_ratevolume_overall_write_io_ratevolume_overall_total_io_rate
- Examples:
# Example 1: Get IO rate for last hour "Show me IO rate for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the last 1 hour" # Example 2: Get read and write IO rates for last day "Get read and write IO rates for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last day" # Example 3: Check total IO rate for last 20 minutes "What is the total IO rate for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in the last 20 minutes?"
- Description: Get data rate for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested Data Rate for the given system represented by unique system id.
- Supported IO rate metrics
volume_read_data_ratevolume_write_data_ratevolume_total_data_rate
- Examples:
# Example 1: Get data rate for last hour "Show me data rate for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the past hour" # Example 2: Get read data rate for last day "What is the read data rate for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last 24 hours?" # Example 3: Check total data throughput "Get total data rate for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in the last 30 minutes"
- Description: Get response time for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested Response time for the given system represented by unique system id.
- Supported IO rate metrics
volume_read_response_timevolume_write_response_timevolume_total_response_time
- Examples:
# Example 1: Get response time for last hour "Show me response time for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the last hour" # Example 2: Check read response time "What is the read response time for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last day?" # Example 3: Get total response time metrics "Get total response time for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in the last 20 minutes"
- Description: Get transfer size for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested transfer size for the given system represented by unique system id.
- Supported IO rate metrics
volume_read_transfer_sizevolume_write_transfer_sizevolume_total_transfer_size
- Examples:
# Example 1: Get transfer size for last hour "Show me transfer size for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the last hour" # Example 2: Check write transfer size "What is the write transfer size for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last day?" # Example 3: Get total transfer size metrics "Get total transfer size for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in the last 30 minutes"
- Description: Get cpu utilization for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested cpu utilization for the given system represented by unique system id.
- Supported IO rate metrics
cpu_utilization
- Examples:
# Example 1: Get CPU utilization for last hour "Show me CPU utilization for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the last hour" # Example 2: Check CPU usage over last day "What is the CPU utilization for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last 24 hours?" # Example 3: Monitor CPU performance "Get CPU utilization for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in the last 20 minutes"
- Description: Get capacity for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.metric_types(optional list of strings): performance metric typesduration(optional string): duration for the data fetch (e.g.20m,1h,1d)
- Returns: Requested capacity for the given system represented by unique system id.
- Supported IO rate metrics
used_capacityavailable_capacity
- Examples:
# Example 1: Get capacity metrics for last hour "Show me capacity metrics for system 5249e140-3d44-11f1-8e40-a94d2a0672fd for the last hour" # Example 2: Check available capacity "What is the available capacity for system 5249e140-3d44-11f1-8e40-a94d2a0672fd?" # Example 3: Monitor used capacity over time "Get used capacity for system 5249e140-3d44-11f1-8e40-a94d2a0672fd over the last day"
- Description: Get component for a system present on the tenant.
- Inputs:
system_id(string): Unique system id for the system.comp_type(string): name of the component to fetch.tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: Requested capacity for the given system represented by unique system id.
- Supported components
volumespoolsenclosuresdrivesfc-portsip-portshost-connectionsio-groupsmanaged-disks
- Examples:
# Example 1: Get volumes for a system "Show me all volumes for system 5249e140-3d44-11f1-8e40-a94d2a0672fd" # Example 2: List storage pools "What pools are configured on system 5249e140-3d44-11f1-8e40-a94d2a0672fd?" # Example 3: Check FC ports "Get fc-ports for system 5249e140-3d44-11f1-8e40-a94d2a0672fd"
- Description: Get alerts of system under the tenant.
- Inputs:
system_id(string): Unique system id for the system.tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: List of alerts for a system represented by unique system id.
- Examples:
# Example 1: Get alerts for a specific system "Show me alerts for system 5249e140-3d44-11f1-8e40-a94d2a0672fd" # Example 2: Check system alerts "What alerts are active on system 5249e140-3d44-11f1-8e40-a94d2a0672fd?" # Example 3: Get alerts for system in specific tenant "Get alerts for system 5249e140-3d44-11f1-8e40-a94d2a0672fd in tenant tenant123"
- Description: Fetch storage system details, alert details and notification details in sequence with the same input. Filter the result to show only systems in error status, critical alerts and notifications.
- Inputs:
tenant_id_input(optional string): Storage Insights Tenant id.
- Returns: Prompt to execute required tools and output the result
- Examples:
# Example 1: Get morning summary with default tenant "Run morning cup of coffee for my tenant" # Example 2: Get daily health check "Give me the morning cup of coffee report" # Example 3: Get summary for specific tenant "Run morning cup of coffee for tenant 01f13d45-27fd-1e2d-1234-66e2fdea0987"
- Install uv : Refer Installing UV section to install uv.
Tools in this MCP Server invokes IBM Storage Insights APIs and hence needs Storage Insights tenant ID and API key for a working setup. Refer Generating a REST API key to generate REST API key for your tenant ID.
Add below values to src/si_mcp_server_oss/.env file:
DEFAULT_SI_TENANT_ID = <Your Storage Insights tenant ID>
DEFAULT_SI_API_KEY = <Your Storage Insights External Rest API key>
ADDITIONAL_TENANT_API_MAPPING = <Additional tenant id and API key mapping if you want the server to support multiple tenants (optional)>
LOG_FILE_PATH = <Directory path to store mcp server logs (optional)>
LOG_LEVEL = <Log level fo the configured logger (optional)>
CONFIG_FILE_PATH = <Path to the config file (optional)>Add the following configuration to your claude_desktop_config.json:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"si_mcp_server": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/si-mcp-server-oss/src/si_mcp_server_oss",
"run",
"server.py"
]
}
}
}-
We recommend using the MCP Inspector for testing and debugging. You can run the inspector with:
npx @modelcontextprotocol/inspector uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/si-mcp-server-oss/src/si_mcp_server_oss run server.py
The inspector will provide a URL you can open in your browser to see logs and send requests manually.
-
Optionally, change
LOG_LEVELin .env file and set it toDEBUGto collect debug logs from the server.
This MCP servers is configured to communicate over standard input/output (transport=stdio), but can be re-configured for Streamable HTTP. To setup streamable HTTP please refer Authentication and Streamable HTTP
Contributions are welcome! Feel free to open an issue or a pull request if you have any suggestions, bug reports, or improvements to propose.
This project is licensed under the Apache License, Version 2.0.