Apache SkyWalking MCP
Un servidor MCP para integrar agentes de IA con la plataforma de observabilidad SkyWalking y su ecosistema.
Documentación
Apache SkyWalking MCP
SkyWalking-MCP: Un servidor Model Context Protocol (MCP) para integrar agentes de IA con Skywalking OAP y el ecosistema circundante.
SkyWalking: un sistema APM (monitor de rendimiento de aplicaciones), especialmente diseñado para microservicios, arquitecturas nativas de la nube y basadas en contenedores (Docker, Kubernetes, Mesos).
Uso
Desde el código fuente
# Clone the repository
git clone https://github.com/apache/skywalking-mcp.git
cd skywalking-mcp && go mod tidy
# Build the project
make
Opciones de línea de comandos
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.
Puedes iniciar el servidor MCP con el siguiente 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"
Comportamiento de la URL de transporte:
stdio,sseystreamableutilizan el valor de--sw-urlconfigurado (o el valor predeterminadohttp://localhost:12800/graphql).sseystreamableignoran los encabezados de anulación de URL a nivel de solicitud.
Proxies inversos
Los transportes HTTP rechazan una solicitud que llega a través de una dirección de bucle local mientras lleva un encabezado Host que no es de bucle local, respondiendo 403 Forbidden: invalid Host header. Esto es protección contra el rebinding de DNS: una página maliciosa puede apuntar su propio nombre de host a 127.0.0.1 para alcanzar un servidor que se ejecuta en la máquina del visitante, y dicha solicitud es indistinguible de una legítima excepto por ese Host.
Un proxy inverso en el mismo host que reenvía a 127.0.0.1 mientras conserva el Host público produce la misma forma y también se rechaza. Prefiere que el proxy reescriba Host a localhost, o apúntalo a una dirección que no sea de bucle local.
Cuando optes por desactivarlo, combínalo con --allowed-origins. Un navegador en el host del proxy alcanza 127.0.0.1 igual que el proxy, por lo que la lista de permitidos de origen es la única defensa restante:
bin/swmcp streamable --sw-url http://localhost:12800 \
--disable-localhost-protection --allowed-origins https://mcp.example.com
Deshabilitar la protección mientras se deja CORS abierto (el valor predeterminado) permite que cualquier página web controle el servidor a través del navegador de cualquier persona en ese host.
Uso con Cursor, Copilot, Claude Code
{
"mcpServers": {
"skywalking": {
"command": "swmcp stdio",
"args": [
"--sw-url", "http://localhost:12800",
"--sw-username", "admin",
"--sw-password", "${SW_PASSWORD}"
]
}
}
}
Si usas Docker:
make build-image construye una imagen local linux/amd64 por defecto. Para publicación multiplataforma, usa make docker-push, que construye y publica imágenes linux/amd64,linux/arm64 mediante Docker Buildx.
Variantes comunes:
# 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
Luego configura el servidor MCP de la siguiente manera:
{
"mcpServers": {
"skywalking": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"skywalking-mcp:latest",
"--sw-url",
"http://localhost:12800"
]
}
}
}
Herramientas disponibles
SkyWalking MCP proporciona las siguientes herramientas para consultar y analizar datos de SkyWalking OAP:
| Categoría | Nombre de la herramienta | Descripción |
|---|---|---|
| Traza | query_traces | Consulta trazas con filtrado de múltiples condiciones (servicio, endpoint, estado, etiquetas y rango de tiempo mediante inicio/fin/paso). Admite vistas full, summary y errors_only con información de rendimiento. |
| Registro | query_logs | Consulta registros con filtros por servicio, instancia, endpoint, ID de traza, etiquetas y rango de tiempo. Admite almacenamiento en frío y paginación. |
| MQE | execute_mqe_expression | Ejecuta MQE (Expresión de consulta de métricas) para consultar y calcular datos de métricas. Admite cálculos, agregaciones, TopN, análisis de tendencias y múltiples tipos de resultados. |
| MQE | list_mqe_metrics | Lista las métricas disponibles para consultas MQE. Filtra por patrón de expresión regular; devuelve nombre, tipo y catálogo de la métrica. |
| MQE | get_mqe_metric_type | Obtiene información de tipo (REGULAR_VALUE, LABELED_VALUE, SAMPLED_RECORD) para una métrica específica y ayudar a construir expresiones MQE correctas. |
| Metadatos | list_layers | Lista todas las capas registradas en SkyWalking OAP (por ejemplo, GENERAL, MESH, K8S). |
| Metadatos | list_services | Lista todos los servicios registrados en SkyWalking OAP bajo una capa específica. |
| Metadatos | list_instances | Lista todas las instancias de un servicio (por ejemplo, pods o procesos JVM). |
| Metadatos | list_endpoints | Lista los endpoints de un servicio con filtrado opcional por palabra clave. |
| Metadatos | list_processes | Lista los procesos de una instancia de servicio. |
| Evento | query_events | Consulta eventos (implementaciones, reinicios, escalado) con filtros por servicio, instancia, endpoint, tipo y capa. |
| Alarma | query_alarms | Consulta alarmas activadas por incumplimientos de umbrales de métricas. Filtra por alcance, palabra clave y etiquetas. |
| Topología | query_services_topology | Consulta la topología de servicios global o con alcance. Opcionalmente filtra por IDs de servicio específicos o capa. |
| Topología | query_instances_topology | Consulta la topología de instancias de servicio entre un servicio cliente y un servicio servidor. |
| Topología | query_endpoints_topology | Consulta la topología de dependencias de endpoints para un endpoint dado. |
| Topología | query_processes_topology | Consulta la topología de procesos para una instancia de servicio dada. |
Prompts disponibles
SkyWalking MCP proporciona los siguientes prompts para flujos de trabajo de análisis guiados:
| Categoría | Nombre del prompt | Descripción | Argumentos |
|---|---|---|---|
| Rendimiento | analyze-performance | Analiza el rendimiento del servicio usando herramientas de métricas | service_name (obligatorio), start (opcional), end (opcional) |
| Rendimiento | compare-services | Compara métricas de rendimiento entre múltiples servicios | services (obligatorio), metrics (opcional), start (opcional), end (opcional) |
| Rendimiento | top-services | Encuentra los N mejores servicios clasificados por una métrica dada | metric_name (obligatorio), top_n (opcional), order (opcional) |
| Traza | investigate-traces | Investiga trazas en busca de errores y problemas de rendimiento | service_id (opcional), trace_state (opcional), start (opcional), end (opcional) |
| Traza | trace-deep-dive | Análisis profundo de una traza específica | trace_id (obligatorio), view (opcional) |
| Registro | analyze-logs | Analiza registros de servicio en busca de errores y patrones | service_id (opcional), log_level (opcional), start (opcional), end (opcional) |
| Topología | explore-service-topology | Explora servicios, instancias, endpoints y procesos dentro de una capa y rango de tiempo | layer (obligatorio), start (obligatorio), end (opcional) |
| MQE | build-mqe-query | Ayuda a construir expresiones MQE para consultas de métricas complejas | query_type (obligatorio), metrics (obligatorio), conditions (opcional) |
| MQE | explore-metrics | Explora métricas disponibles y sus tipos | pattern (opcional), show_examples (opcional) |
| Utilidad | generate_duration | Convierte un rango de tiempo en lenguaje natural en un objeto de duración {start, end} para usar con otras herramientas | time_range (obligatorio) |
Contacto
- Envía un problema usando MCP como prefijo del título.
- Lista de correo: dev@skywalking.apache.org. Envía un correo a
dev-subscribe@skywalking.apache.org, sigue la respuesta para suscribirte a la lista de correo. - Únete al canal
skywalkingen Apache Slack. Si el enlace no funciona, encuentra el más reciente en Apache INFRA WIKI. - Twitter, ASFSkyWalking