Skip to content

Repository files navigation

Apache SkyWalking MCP

Sky Walking logo

SkyWalking-MCP: A Model Context Protocol (MCP) server for integrating AI agents with Skywalking OAP and the surrounding ecosystem.

SkyWalking: an APM(application performance monitor) system, especially designed for microservices, cloud native and container-based (Docker, Kubernetes, Mesos) architectures.

Usage

From Source

# Clone the repository
git clone https://github.com/apache/skywalking-mcp.git
cd skywalking-mcp && go mod tidy
# Build the project
make

Command-line Options

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 helpfor 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 forOAP connections (use onlyin 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.

You could start the MCP server with the following command:

# 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"

Transport URL behavior:

  • stdio, sse, and streamable all use the configured --sw-url value (or the default http://localhost:12800/graphql).
  • sse and streamable ignore request-level URL override headers.

Reverse proxies

The HTTP transports reject a request that arrives over a loopback address while carrying a non-loopback Host header, answering 403 Forbidden: invalid Host header. This is DNS rebinding protection: a malicious page can point its own hostname at 127.0.0.1 to reach a server running on the visitor's machine, and such a request is indistinguishable from a legitimate one except for that Host.

A same-host reverse proxy that forwards to 127.0.0.1 while preserving the public Host produces the same shape and is rejected too. Prefer having the proxy rewrite Host to localhost, or point it at a non-loopback address.

When you do opt out, pair it with --allowed-origins. A browser on the proxy host reaches 127.0.0.1 just as the proxy does, so the origin allowlist is the only defense left:

bin/swmcp streamable --sw-url http://localhost:12800 \
--disable-localhost-protection --allowed-origins https://mcp.example.com

Disabling the protection while leaving CORS open (the default) lets any web page drive the server through the browser of anyone on that host.

Usage with Cursor, Copilot, Claude Code

{
"mcpServers": {
"skywalking": {
"command": "swmcp stdio",
"args": [
"--sw-url", "http://localhost:12800",
"--sw-username", "admin",
"--sw-password", "${SW_PASSWORD}"
]
}
}
}

If using Docker:

make build-image builds a local linux/amd64 image by default. For multi-platform publishing, use make docker-push, which builds and pushes linux/amd64,linux/arm64 images via Docker Buildx.

Common variants:

# 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

Then configure the MCP server like this:

{
"mcpServers": {
"skywalking": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"skywalking-mcp:latest",
"--sw-url",
"http://localhost:12800"
]
}
}
}

Available Tools

SkyWalking MCP provides the following tools to query and analyze SkyWalking OAP data:

CategoryTool NameDescription
Tracequery_tracesQuery traces with multi-condition filtering (service, endpoint, state, tags, and time range via start/end/step). Supports full, summary, and errors_only views with performance insights.
Logquery_logsQuery logs with filters for service, instance, endpoint, trace ID, tags, and time range. Supports cold storage and pagination.
MQEexecute_mqe_expressionExecute MQE (Metrics Query Expression) to query and calculate metrics data. Supports calculations, aggregations, TopN, trend analysis, and multiple result types.
MQElist_mqe_metricsList available metrics for MQE queries. Filter by regex pattern; returns metric name, type, and catalog.
MQEget_mqe_metric_typeGet type information (REGULAR_VALUE, LABELED_VALUE, SAMPLED_RECORD) for a specific metric to help build correct MQE expressions.
Metadatalist_layersList all layers registered in SkyWalking OAP (e.g. GENERAL, MESH, K8S).
Metadatalist_servicesList all services registered in SkyWalking OAP under a specific layer.
Metadatalist_instancesList all instances of a service (e.g. pods or JVM processes).
Metadatalist_endpointsList endpoints of a service with optional keyword filtering.
Metadatalist_processesList processes of a service instance.
Eventquery_eventsQuery events (deployments, restarts, scaling) with filters for service, instance, endpoint, type, and layer.
Alarmquery_alarmsQuery alarms triggered by metric threshold breaches. Filter by scope, keyword, and tags.
Topologyquery_services_topologyQuery global or scoped service topology. Optionally filter by specific service IDs or layer.
Topologyquery_instances_topologyQuery service instance topology between a client service and a server service.
Topologyquery_endpoints_topologyQuery endpoint dependency topology for a given endpoint.
Topologyquery_processes_topologyQuery process topology for a given service instance.

Available Prompts

SkyWalking MCP provides the following prompts for guided analysis workflows:

CategoryPrompt NameDescriptionArguments
Performanceanalyze-performanceAnalyze service performance using metrics toolsservice_name (required), start (optional), end (optional)
Performancecompare-servicesCompare performance metrics between multiple servicesservices (required), metrics (optional), start (optional), end (optional)
Performancetop-servicesFind top N services ranked by a given metricmetric_name (required), top_n (optional), order (optional)
Traceinvestigate-tracesInvestigate traces for errors and performance issuesservice_id (optional), trace_state (optional), start (optional), end (optional)
Tracetrace-deep-diveDeep dive analysis of a specific tracetrace_id (required), view (optional)
Loganalyze-logsAnalyze service logs for errors and patternsservice_id (optional), log_level (optional), start (optional), end (optional)
Topologyexplore-service-topologyExplore services, instances, endpoints, and processes within a layer and time rangelayer (required), start (required), end (optional)
MQEbuild-mqe-queryHelp build MQE expressions for complex metric queriesquery_type (required), metrics (required), conditions (optional)
MQEexplore-metricsExplore available metrics and their typespattern (optional), show_examples (optional)
Utilitygenerate_durationConvert a natural-language time range into a {start, end} duration object for use with other toolstime_range (required)

Contact Us

License

Apache 2.0 License.

About

Apache SkyWalking MCP Server

Topics

Resources

Code of conduct

Security policy

Stars

34 stars

Watchers

33 watching

Forks

Releases

Packages

Used by

Contributors

Languages