IBM Storage Insights MCP Server

Um servidor MCP de código aberto que fornece observabilidade em tempo real para ativos do IBM Storage Insights.

Documentação

IBM Storage Insights MCP Server

AVISO: Este é um projeto mantido pela comunidade e não é oficialmente afiliado, endossado ou suportado pela IBM. Este servidor MCP utiliza as APIs externas do IBM Storage Insights.

Este servidor de Model Context Protocol (MCP) de código aberto ajudará o IBM Storage Insights a se integrar no ecossistema Agentic-AI. Ele ajudará os usuários a trazerem seus Agentes de IA para observabilidade e diagnóstico contínuos de seus Ativos de Armazenamento registrados no IBM Storage Insights.

🚀 Recursos

  • Ferramentas de Observabilidade: Aproveite os principais recursos de monitoramento do IBM Storage Insights por meio de uma interface MCP.
  • Design Extensível: Integre facilmente APIs adicionais do Storage Insights para expansões futuras.
  • Pythônico: Permitindo facilidade de uso e extensão para desenvolvedores de IA

🛠️ Ferramentas

Listadas abaixo estão as ferramentas atualmente expostas pelo servidor MCP:

1. fetch_tenant_alerts

  • Descrição: Recupera uma lista de alertas para um tenant.
  • Entradas:
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Lista de alertas presentes para o tenant.
  • Exemplos:
    # 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

  • Descrição: Recupera uma lista de notificações para um tenant.
  • Entradas:
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Lista de notificações presentes para o tenant.
  • Exemplos:
    # 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

  • Descrição: Obtém todos os sistemas de armazenamento adicionados ao tenant para monitoramento do tenant.
  • Entradas:
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Lista de sistemas de armazenamento presentes no tenant.
  • Exemplos:
    # 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

  • Descrição: Obtém notificações do sistema sob o tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Lista de notificações para um sistema representado pelo ID exclusivo do sistema.
  • Exemplos:
    # 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

  • Descrição: Obtém detalhes para o sistema fornecido presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Detalhes de um sistema representado pelo ID exclusivo do sistema.
  • Exemplos:
    # 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

  • Descrição: Obtém a taxa de IO para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Taxa de IO solicitada para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • volume_overall_read_io_rate
    • volume_overall_write_io_rate
    • volume_overall_total_io_rate
  • Exemplos:
    # 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

  • Descrição: Obtém a taxa de dados para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Taxa de dados solicitada para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • volume_read_data_rate
    • volume_write_data_rate
    • volume_total_data_rate
  • Exemplos:
    # 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

  • Descrição: Obtém o tempo de resposta para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Tempo de resposta solicitado para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • volume_read_response_time
    • volume_write_response_time
    • volume_total_response_time
  • Exemplos:
    # 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

  • Descrição: Obtém o tamanho de transferência para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Tamanho de transferência solicitado para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • volume_read_transfer_size
    • volume_write_transfer_size
    • volume_total_transfer_size
  • Exemplos:
    # 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

  • Descrição: Obtém a utilização da CPU para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Utilização da CPU solicitada para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • cpu_utilization
  • Exemplos:
    # 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

  • Descrição: Obtém a capacidade para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
    • metric_types (lista opcional de strings): tipos de métricas de desempenho
    • duration (string opcional): duração para a busca de dados (por exemplo, 20m, 1h, 1d)
  • Retorna: Capacidade solicitada para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Métricas de taxa de IO suportadas
    • used_capacity
    • available_capacity
  • Exemplos:
    # 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

  • Descrição: Obtém o componente para um sistema presente no tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • comp_type (string): nome do componente a ser buscado.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Capacidade solicitada para o sistema fornecido representado pelo ID exclusivo do sistema.
  • Componentes suportados
    • volumes
    • pools
    • enclosures
    • drives
    • fc-ports
    • ip-ports
    • host-connections
    • io-groups
    • managed-disks
  • Exemplos:
    # 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

  • Descrição: Obtém alertas do sistema sob o tenant.
  • Entradas:
    • system_id (string): ID exclusivo do sistema.
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Lista de alertas para um sistema representado pelo ID exclusivo do sistema.
  • Exemplos:
    # 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

  • Descrição: Busca detalhes do sistema de armazenamento, detalhes de alertas e detalhes de notificações em sequência com a mesma entrada. Filtra o resultado para mostrar apenas sistemas em status de erro, alertas críticos e notificações.
  • Entradas:
    • tenant_id_input (string opcional): ID do tenant do Storage Insights.
  • Retorna: Prompt para executar as ferramentas necessárias e gerar o resultado
  • Exemplos:
    # 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"
    

🧪 Configuração

Configure seu ambiente

  • Instale o uv: Consulte a seção Instalando UV para instalar o uv.

Credenciais do Storage Insights

As ferramentas deste servidor MCP invocam APIs do IBM Storage Insights e, portanto, precisam do ID do tenant e da chave de API do Storage Insights para uma configuração funcional. Consulte Gerando uma chave de API REST para gerar a chave de API REST para o seu ID de tenant.

Adicione os valores abaixo ao arquivo 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 com Claude Desktop

Adicione a seguinte configuração ao seu 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"
      ]
    }
  }
}

🐞 Testes e Depuração

  1. Recomendamos usar o MCP Inspector para testes e depuração. Você pode executar o inspetor com:

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

    O inspetor fornecerá uma URL que você pode abrir no navegador para ver logs e enviar solicitações manualmente.

  2. Opcionalmente, altere LOG_LEVEL no arquivo .env e defina-o como DEBUG para coletar logs de depuração do servidor.

Executando o servidor MCP com transporte HTTP Streamable

Este servidor MCP está configurado para se comunicar via entrada/saída padrão (transport=stdio), mas pode ser reconfigurado para HTTP Streamable. Para configurar HTTP Streamable, consulte Autenticação e HTTP Streamable

🤝 Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para abrir uma issue ou um pull request se tiver sugestões, relatórios de bugs ou melhorias a propor.

📄 Licença

Este projeto está licenciado sob a Apache License, Version 2.0.