IBM Storage Insights MCP Server

Un servidor MCP de código abierto que proporciona observabilidad en tiempo real para activos de IBM Storage Insights.

Documentación

IBM Storage Insights MCP Server

AVISO: Este es un proyecto mantenido por la comunidad y no está afiliado oficialmente, respaldado ni soportado por IBM. Este servidor MCP utiliza las IBM Storage Insights External APIs.

Este servidor de Model Context Protocol (MCP) de código abierto ayudará a IBM Storage Insights a integrarse en el ecosistema Agentic-AI. Ayudará a los usuarios a llevar sus Agentes de IA para una observabilidad y diagnóstico sin interrupciones de sus Activos de Almacenamiento registrados con IBM Storage Insights.

🚀 Características

  • Herramientas de Observabilidad: Aproveche las capacidades clave de monitoreo de IBM Storage Insights a través de una interfaz MCP.
  • Diseño Extensible: Integre fácilmente APIs adicionales de Storage Insights para futuras expansiones.
  • Pitónico: Permite facilidad de uso y extensión para desarrolladores de IA.

🛠️ Herramientas

A continuación se enumeran las herramientas que actualmente se exponen a través del servidor MCP:

1. fetch_tenant_alerts

  • Descripción: Recuperar una lista de alertas para un inquilino.
  • Entradas:
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Lista de alertas presentes para el inquilino.
  • Ejemplos:
    # 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?"
    

2. fetch_tenant_notifications

  • Descripción: Recuperar una lista de notificaciones para un inquilino.
  • Entradas:
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Lista de notificaciones presentes para el inquilino.
  • Ejemplos:
    # 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?"
    

3. fetch_storage_systems

  • Descripción: Obtener todos los sistemas de almacenamiento agregados al inquilino para monitorear el inquilino.
  • Entradas:
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Lista de sistemas de almacenamiento presentes en el inquilino.
  • Ejemplos:
    # 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?"
    

4. fetch_system_notifications

  • Descripción: Obtener notificaciones del sistema bajo el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Lista de notificaciones para un sistema representado por ID de sistema único.
  • Ejemplos:
    # 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"
    

5. fetch_system_details

  • Descripción: Obtener detalles para un sistema dado presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Detalles de un sistema representado por ID de sistema único.
  • Ejemplos:
    # 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"
    

6. fetch_system_io_rate

  • Descripción: Obtener tasa de E/S para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Tasa de E/S solicitada para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • volume_overall_read_io_rate
    • volume_overall_write_io_rate
    • volume_overall_total_io_rate
  • Ejemplos:
    # 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?"
    

7. fetch_system_data_rate

  • Descripción: Obtener tasa de datos para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Tasa de datos solicitada para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • volume_read_data_rate
    • volume_write_data_rate
    • volume_total_data_rate
  • Ejemplos:
    # 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"
    

8. fetch_system_response_time

  • Descripción: Obtener tiempo de respuesta para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Tiempo de respuesta solicitado para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • volume_read_response_time
    • volume_write_response_time
    • volume_total_response_time
  • Ejemplos:
    # 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"
    

9. fetch_system_transfer_size

  • Descripción: Obtener tamaño de transferencia para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Tamaño de transferencia solicitado para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • volume_read_transfer_size
    • volume_write_transfer_size
    • volume_total_transfer_size
  • Ejemplos:
    # 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"
    

10. fetch_system_cpu_utilization

  • Descripción: Obtener utilización de CPU para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Utilización de CPU solicitada para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • cpu_utilization
  • Ejemplos:
    # 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"
    

11. fetch_system_capacity

  • Descripción: Obtener capacidad para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
    • metric_types (lista opcional de cadenas): tipos de métricas de rendimiento.
    • duration (cadena opcional): duración para la obtención de datos (p. ej. 20m, 1h, 1d)
  • Devuelve: Capacidad solicitada para el sistema dado representado por ID de sistema único.
  • Métricas de tasa de E/S compatibles
    • used_capacity
    • available_capacity
  • Ejemplos:
    # 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"
    

12. fetch_system_components

  • Descripción: Obtener componente para un sistema presente en el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • comp_type (cadena): nombre del componente a obtener.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Capacidad solicitada para el sistema dado representado por ID de sistema único.
  • Componentes compatibles
    • volumes
    • pools
    • enclosures
    • drives
    • fc-ports
    • ip-ports
    • host-connections
    • io-groups
    • managed-disks
  • Ejemplos:
    # 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"
    

13. fetch_system_alerts

  • Descripción: Obtener alertas del sistema bajo el inquilino.
  • Entradas:
    • system_id (cadena): ID de sistema único para el sistema.
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Lista de alertas para un sistema representado por ID de sistema único.
  • Ejemplos:
    # 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"
    

💬 Prompts

1. morning_cup_of_coffee

  • Descripción: Obtener detalles del sistema de almacenamiento, detalles de alertas y detalles de notificaciones en secuencia con la misma entrada. Filtrar el resultado para mostrar solo sistemas en estado de error, alertas críticas y notificaciones.
  • Entradas:
    • tenant_id_input (cadena opcional): ID de inquilino de Storage Insights.
  • Devuelve: Prompt para ejecutar las herramientas requeridas y mostrar el resultado.
  • Ejemplos:
    # 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"
    

🧪 Configuración

Configure su entorno

  • Instale uv: Consulte la sección Instalando UV para instalar uv.

Credenciales de Storage Insights

Las herramientas en este servidor MCP invocan las APIs de IBM Storage Insights y, por lo tanto, necesitan el ID de inquilino de Storage Insights y la clave de API para una configuración funcional. Consulte Generando una clave de API REST para generar la clave de API REST para su ID de inquilino.

Agregue los siguientes valores al archivo src/si_mcp_server_oss/.env:

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)>

🖥️ Uso con Claude Desktop

Agregue la siguiente configuración a su 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"
      ]
    }
  }
}

🐞 Pruebas y Depuración

  1. Recomendamos usar el MCP Inspector para pruebas y depuración. Puede ejecutar el inspector con:

    npx @modelcontextprotocol/inspector uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/si-mcp-server-oss/src/si_mcp_server_oss run server.py
    

    El inspector proporcionará una URL que puede abrir en su navegador para ver registros y enviar solicitudes manualmente.

  2. Opcionalmente, cambie LOG_LEVEL en el archivo .env y configúrelo a DEBUG para recopilar registros de depuración del servidor.

Ejecutar el servidor MCP con transporte HTTP Streamable

Este servidor MCP está configurado para comunicarse a través de entrada/salida estándar (transport=stdio), pero puede reconfigurarse para HTTP Streamable. Para configurar HTTP Streamable, consulte Autenticación y HTTP Streamable

🤝 Contribuciones

¡Las contribuciones son bienvenidas! No dude en abrir un issue o un pull request si tiene sugerencias, informes de errores o mejoras que proponer.

📄 Licencia

Este proyecto está licenciado bajo la Apache License, Versión 2.0.