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 desempenhoduration(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_ratevolume_overall_write_io_ratevolume_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 desempenhoduration(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_ratevolume_write_data_ratevolume_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 desempenhoduration(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_timevolume_write_response_timevolume_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 desempenhoduration(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_sizevolume_write_transfer_sizevolume_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 desempenhoduration(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 desempenhoduration(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_capacityavailable_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
volumespoolsenclosuresdrivesfc-portsip-portshost-connectionsio-groupsmanaged-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
-
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.pyO inspetor fornecerá uma URL que você pode abrir no navegador para ver logs e enviar solicitações manualmente.
-
Opcionalmente, altere
LOG_LEVELno arquivo .env e defina-o comoDEBUGpara 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.