Apache SkyWalking MCP
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 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.
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, andstreamableall use the configured--sw-urlvalue (or the defaulthttp://localhost:12800/graphql).sseandstreamableignore 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:
Available Prompts
SkyWalking MCP provides the following prompts for guided analysis workflows:
Contact Us
- Submit an issue by using MCP as title prefix.
- Mail list: [email protected]. Mail to
[email protected], follow the reply to subscribe the mail list. - Join
skywalkingchannel at Apache Slack. If the link is not working, find the latest one at Apache INFRA WIKI. - Twitter, ASFSkyWalking