Apache SkyWalking MCP
Um servidor MCP para integrar agentes de IA com a plataforma de observabilidade SkyWalking e seu ecossistema.
Documentação
Apache SkyWalking MCP
SkyWalking-MCP: Um servidor Model Context Protocol (MCP) para integrar agentes de IA com o Skywalking OAP e o ecossistema ao redor.
SkyWalking: um sistema de APM (monitoramento de desempenho de aplicações), especialmente projetado para arquiteturas de microsserviços, cloud native e baseadas em contêineres (Docker, Kubernetes, Mesos).
Uso
A partir do código-fonte
# Clone the repository
git clone https://github.com/apache/skywalking-mcp.git
cd skywalking-mcp && go mod tidy
# Build the project
make
Opções de linha de comando
Usage:
swmcp [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
sse Start SSE server
stdio Start stdio server
streamable Start Streamable server
Global Flags:
-h, --help help for swmcp
--log-command When true, log commands to the log file
--log-file string Path to log file
--log-level string Logging level (debug, info, warn, error) (default "info")
--read-only Restrict the server to read-only operations
--sw-url string Specify the OAP URL to connect to (e.g. http://localhost:12800)
--sw-username string Username for basic auth to SkyWalking OAP (supports ${ENV_VAR} syntax)
--sw-password string Password for basic auth to SkyWalking OAP (supports ${ENV_VAR} syntax)
--sw-insecure Skip TLS certificate verification for OAP connections (use only in development)
-v, --version version for swmcp
SSE-specific Flags:
--sse-address string Host and port for the SSE server (default "localhost:8000")
--base-path string Base path for the SSE server
--allowed-origins string Comma-separated list of allowed CORS origins. Empty reflects any origin (open CORS). Use * to send the wildcard header.
--disable-localhost-protection Disable DNS rebinding protection (see Reverse proxies below)
Streamable-specific Flags:
--address string Host and port for the Streamable HTTP server (default "localhost:8000")
--endpoint-path string Endpoint path for the Streamable HTTP server (default "/mcp")
--allowed-origins string Comma-separated list of allowed CORS origins. Empty reflects any origin (open CORS). Use * to send the wildcard header.
--disable-localhost-protection Disable DNS rebinding protection (see Reverse proxies below)
Use "swmcp [command] --help" for more information about a command.
Você pode iniciar o servidor MCP com o seguinte comando:
# use stdio server
bin/swmcp stdio --sw-url http://localhost:12800
# with basic auth (raw password)
bin/swmcp stdio --sw-url http://localhost:12800 --sw-username admin --sw-password admin
# with basic auth (password from environment variable)
bin/swmcp stdio --sw-url http://localhost:12800 --sw-username admin --sw-password '${SW_PASSWORD}'
# skip TLS verification (development only, e.g. self-signed certs)
bin/swmcp stdio --sw-url https://localhost:12800 --sw-insecure
# or use SSE server
bin/swmcp sse --sse-address localhost:8000 --base-path /mcp --sw-url http://localhost:12800
# restrict CORS to specific origins (SSE and streamable transports)
bin/swmcp streamable --sw-url http://localhost:12800 --allowed-origins "http://localhost:3000,https://app.example.com"
Comportamento da URL de transporte:
stdio,sseestreamableusam o valor configurado de--sw-url(ou o padrãohttp://localhost:12800/graphql).sseestreamableignoram cabeçalhos de substituição de URL em nível de solicitação.
Proxies reversos
Os transportes HTTP rejeitam uma solicitação que chega por um endereço de loopback enquanto carrega um cabeçalho Host que não seja de loopback, respondendo com 403 Forbidden: invalid Host header. Isso é proteção contra rebinding de DNS: uma página maliciosa pode apontar seu próprio nome de host para 127.0.0.1 para alcançar um servidor em execução na máquina do visitante, e tal solicitação é indistinguível de uma legítima, exceto por esse Host.
Um proxy reverso no mesmo host que encaminha para 127.0.0.1 preservando o Host público produz o mesmo formato e também é rejeitado. Prefira fazer o proxy reescrever Host para localhost, ou aponte-o para um endereço que não seja de loopback.
Quando você optar por desativar, combine com --allowed-origins. Um navegador no host do proxy alcança 127.0.0.1 exatamente como o proxy faz, então a lista de permissões de origem é a única defesa restante:
bin/swmcp streamable --sw-url http://localhost:12800 \
--disable-localhost-protection --allowed-origins https://mcp.example.com
Desabilitar a proteção enquanto mantém o CORS aberto (o padrão) permite que qualquer página da web acione o servidor por meio do navegador de qualquer pessoa nesse host.
Uso com Cursor, Copilot, Claude Code
{
"mcpServers": {
"skywalking": {
"command": "swmcp stdio",
"args": [
"--sw-url", "http://localhost:12800",
"--sw-username", "admin",
"--sw-password", "${SW_PASSWORD}"
]
}
}
}
Se estiver usando Docker:
make build-image cria uma imagem local linux/amd64 por padrão. Para publicação multiplataforma, use make docker-push, que cria e envia imagens linux/amd64,linux/arm64 via Docker Buildx.
Variantes comuns:
# Build a local image and load it into your Docker daemon
make build-image
# Build and push a multi-platform image to the default registry
make docker-push VERSION=0.1.0
# Push to a custom registry/repository
make docker-push IMAGE=ghcr.io/your-org/skywalking-mcp VERSION=0.1.0
# Build for a custom platform set
make docker-build PLATFORMS=linux/arm64 OUTPUT=--load
Em seguida, configure o servidor MCP assim:
{
"mcpServers": {
"skywalking": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"skywalking-mcp:latest",
"--sw-url",
"http://localhost:12800"
]
}
}
}
Ferramentas Disponíveis
O SkyWalking MCP fornece as seguintes ferramentas para consultar e analisar dados do SkyWalking OAP:
| Categoria | Nome da Ferramenta | Descrição |
|---|---|---|
| Trace | query_traces | Consulta traces com filtragem por múltiplas condições (serviço, endpoint, estado, tags e intervalo de tempo via início/fim/etapa). Suporta visualizações full, summary e errors_only com insights de desempenho. |
| Log | query_logs | Consulta logs com filtros para serviço, instância, endpoint, ID de trace, tags e intervalo de tempo. Suporta armazenamento frio e paginação. |
| MQE | execute_mqe_expression | Executa MQE (Metrics Query Expression) para consultar e calcular dados de métricas. Suporta cálculos, agregações, TopN, análise de tendências e múltiplos tipos de resultado. |
| MQE | list_mqe_metrics | Lista métricas disponíveis para consultas MQE. Filtra por padrão regex; retorna nome da métrica, tipo e catálogo. |
| MQE | get_mqe_metric_type | Obtém informações de tipo (REGULAR_VALUE, LABELED_VALUE, SAMPLED_RECORD) para uma métrica específica, ajudando a construir expressões MQE corretas. |
| Metadata | list_layers | Lista todas as camadas registradas no SkyWalking OAP (ex.: GENERAL, MESH, K8S). |
| Metadata | list_services | Lista todos os serviços registrados no SkyWalking OAP sob uma camada específica. |
| Metadata | list_instances | Lista todas as instâncias de um serviço (ex.: pods ou processos JVM). |
| Metadata | list_endpoints | Lista endpoints de um serviço com filtragem opcional por palavra-chave. |
| Metadata | list_processes | Lista processos de uma instância de serviço. |
| Event | query_events | Consulta eventos (implantações, reinicializações, escalonamento) com filtros para serviço, instância, endpoint, tipo e camada. |
| Alarm | query_alarms | Consulta alarmes acionados por violações de limite de métricas. Filtra por escopo, palavra-chave e tags. |
| Topology | query_services_topology | Consulta topologia de serviços global ou com escopo. Opcionalmente, filtra por IDs de serviço específicos ou camada. |
| Topology | query_instances_topology | Consulta topologia de instâncias de serviço entre um serviço cliente e um serviço servidor. |
| Topology | query_endpoints_topology | Consulta topologia de dependência de endpoints para um endpoint específico. |
| Topology | query_processes_topology | Consulta topologia de processos para uma instância de serviço específica. |
Prompts Disponíveis
O SkyWalking MCP fornece os seguintes prompts para fluxos de trabalho de análise guiada:
| Categoria | Nome do Prompt | Descrição | Argumentos |
|---|---|---|---|
| Desempenho | analyze-performance | Analisa o desempenho do serviço usando ferramentas de métricas | service_name (obrigatório), start (opcional), end (opcional) |
| Desempenho | compare-services | Compara métricas de desempenho entre vários serviços | services (obrigatório), metrics (opcional), start (opcional), end (opcional) |
| Desempenho | top-services | Encontra os N principais serviços classificados por uma determinada métrica | metric_name (obrigatório), top_n (opcional), order (opcional) |
| Trace | investigate-traces | Investiga traces para erros e problemas de desempenho | service_id (opcional), trace_state (opcional), start (opcional), end (opcional) |
| Trace | trace-deep-dive | Análise aprofundada de um trace específico | trace_id (obrigatório), view (opcional) |
| Log | analyze-logs | Analisa logs de serviço para erros e padrões | service_id (opcional), log_level (opcional), start (opcional), end (opcional) |
| Topologia | explore-service-topology | Explora serviços, instâncias, endpoints e processos dentro de uma camada e intervalo de tempo | layer (obrigatório), start (obrigatório), end (opcional) |
| MQE | build-mqe-query | Ajuda a construir expressões MQE para consultas de métricas complexas | query_type (obrigatório), metrics (obrigatório), conditions (opcional) |
| MQE | explore-metrics | Explora métricas disponíveis e seus tipos | pattern (opcional), show_examples (opcional) |
| Utilitário | generate_duration | Converte um intervalo de tempo em linguagem natural em um objeto de duração {start, end} para uso com outras ferramentas | time_range (obrigatório) |
Contato
- Envie um problema usando MCP como prefixo do título.
- Lista de e-mails: dev@skywalking.apache.org. Envie um e-mail para
dev-subscribe@skywalking.apache.org, siga a resposta para assinar a lista de e-mails. - Participe do canal
skywalkingno Apache Slack. Se o link não funcionar, encontre o mais recente no Apache INFRA WIKI. - Twitter, ASFSkyWalking