by instana
Provides a bridge that lets MCP clients query Instana’s observability platform, translating natural‑language requests into Instana API calls and returning structured, consumable results.
Instana Mcp Server enables seamless interaction between Model Context Protocol (MCP) clients (e.g., Claude Desktop, Bob IDE, Copilot) and the Instana observability APIs. It acts as a proxy that receives tool requests, performs the appropriate Instana API calls, and formats the responses for downstream LLM processing.
pip install mcp-instana
or set up a development environment with uv.mcp-instana --transport streamable-http
mcp-instana --transport stdio
instana-base-url, instana-api-token, etc.). In stdio mode, provide them via environment variables (INSTANA_BASE_URL, INSTANA_API_TOKEN).http://localhost:8080/mcp) and include the required headers or env vars.Q: Do I need to set SSL verification for internal Instana instances with self‑signed certificates?
A: Yes. Disable verification with --verify-ssl false or set INSTANA_SSL_VERIFY=false, or supply a custom CA bundle via INSTANA_CA_BUNDLE.
Q: Which transport mode should I choose? A: Streamable HTTP is recommended for most integrations because it allows per‑request header authentication and works well with shared environments. Stdio is useful when the client only supports stdin/stdout communication.
Q: How can I limit the tools that are loaded?
A: Use the --tools flag with a comma‑separated list of categories (e.g., --tools app,infra). Run mcp-instana --list-tools to see all available categories.
Q: Is there support for caching to improve performance?
A: Yes. Catalog responses are cached for 30 minutes by default. Control it with INSTANA_CACHE_ENABLED and INSTANA_CACHE_TTL, or override per request via instana-cache-enabled and instana-cache-ttl headers.
Q: How do I run the server in Docker?
A: Build the image with docker build -t mcp-instana . and run docker run -p 8080:8080 mcp-instana. The container starts in streamable‑HTTP mode by default.
🔒 SSL Enabled by Default: Starting with this release 1.0.3, SSL certificate verification is enabled by default for all outgoing Instana API calls. You can customize this behaviour (disable, supply a custom CA bundle, etc.) via CLI flag, environment variable, or
config.yaml. See SSL Certificate Verification for full details.
The Instana MCP server enables seamless interaction with the Instana observability platform, allowing you to access real-time observability data directly within your development workflow.
It serves as a bridge between clients (such as AI agents or custom tools) and the Instana REST APIs, converting user queries into Instana API requests and formatting the responses into structured, easily consumable formats.
The server supports both Streamable HTTP and Stdio transport modes for maximum compatibility with different MCP clients. For more details, refer to the MCP Transport Modes specification.
Consider a simple example: You're using an MCP Host (such as Claude Desktop, VS Code, or another client) connected to the Instana MCP Server. When you request information about Instana alerts, the following process occurs:
python - version 3.10 or higherpip - version 21.3 or higher (only required for pypi based installation)uv - version 0.11.6 or higher (only required for development installation)The easiest way to use mcp-instana is to install it directly from PyPI:
pip install mcp-instana
After installation, you can run the server using the mcp-instana command directly.
For development or local customization, you can clone and set up the project locally.
This project uses uv, a fast Python package installer and resolver. To install uv, you have several options:
Using pip:
pip install uv
Using Homebrew (macOS):
brew install uv
For more installation options and detailed instructions, visit the uv documentation.
After installing uv, set up the project environment by running:
uv sync
When using Streamable HTTP mode, you must pass Instana credentials via HTTP headers. This approach enhances security and flexibility by:
Supported Authentication Modes:
Required Headers:
instana-base-url: Your Instana instance URLinstana-api-token: Your Instana API tokenExample:
--header "instana-base-url: https://your-instance.instana.io"
--header "instana-api-token: your-api-token"
Required Headers:
instana-base-url: Your Instana instance URLinstana-auth-token: Session authentication token from UI backendinstana-csrf-token: CSRF token from UI backendinstana-cookie-name: (Optional) Cookie name for session auth (default: instanaAuthToken)Example:
--header "instana-base-url: https://your-instance.instana.io"
--header "instana-auth-token: your-session-token"
--header "instana-csrf-token: your-csrf-token"
--header "instana-cookie-name: in-token"
Required Headers:
instana-base-url: Your Instana instance URLinstana-jwt-token: JWT token from IBM Platforminstana-csrf-token: CSRF token for request validationExample Configuration:
{
"mcpServers": {
"Instana MCP Server": {
"command": "npx",
"args": [
"mcp-remote",
"http://0.0.0.0:8080/mcp",
"--allow-http",
"--header",
"instana-base-url: https://your-instana-instance.instana.io",
"--header",
"instana-jwt-token: your_jwt_token_here",
"--header",
"instana-csrf-token: your_csrf_token_here"
]
}
}
}
Authentication Priority:
INSTANA_API_TOKEN) - FallbackAuthentication Flow:
This design ensures secure credential transmission and supports multiple authentication flows including UI-initiated calls via WebSocket → Coordinator → MCP Server.
Ensure that the token used has the necessary permissions to invoke MCP tools. Check here for more information.
Before configuring any MCP client (Claude Desktop, GitHub Copilot, or custom MCP clients), you need to start the local MCP server. The server supports two transport modes: Streamable HTTP and Stdio.
If you installed mcp-instana from PyPI, use the mcp-instana command:
mcp-instana [OPTIONS]
For local development, use the uv run command:
uv run src/core/server.py [OPTIONS]
Available Options:
--transport <mode>: Transport mode (choices: streamable-http, stdio)--env KEY=VALUE: Set environment variable (can be repeated for multiple variables, e.g., --env INSTANA_BASE_URL=https://... --env INSTANA_API_TOKEN=...)--debug: Enable debug mode with additional logging--log-level <level>: Set the logging level (choices: DEBUG, INFO, WARNING, ERROR, CRITICAL)--tools <categories>: Comma-separated list of tool categories to enable (e.g., infra,app,events,website). Enabling a category will also enable its related prompts. For example: --tools infra enables the infra tools and all infra-related prompts.--list-tools: List all available tool categories and exit--port <port>: MCP server port (default: 8080, can be overridden with PORT env var)--verify-ssl [BOOL]: Enable or disable SSL certificate verification for outgoing Instana API calls (default: true). Pass false/0/noto disable. Equivalent to settingINSTANA_SSL_VERIFY=false`.--help: Show help message and exitStreamable HTTP mode provides a REST API interface and is recommended for most use cases.
# Start with all tools enabled (default)
mcp-instana --transport streamable-http
# Start with debug logging
mcp-instana --transport streamable-http --debug
# Start with a specific log level
mcp-instana --transport streamable-http --log-level WARNING
# Start with specific tool categories only
mcp-instana --transport streamable-http --tools infra,events
# Combine options (specific log level, custom tools)
mcp-instana --transport streamable-http --log-level DEBUG --tools app,events
# Start with all tools enabled (default)
uv run src/core/server.py --transport streamable-http
# Start with debug logging
uv run src/core/server.py --transport streamable-http --debug
# Start with a specific log level
uv run src/core/server.py --transport streamable-http --log-level WARNING
# Start with specific tool and prompts categories only
uv run src/core/server.py --transport streamable-http --tools infra,events
# Start with custom port
uv run src/core/server.py --transport streamable-http --port 9000
# Combine options (specific log level, custom tools and prompts)
uv run src/core/server.py --transport streamable-http --log-level DEBUG --tools app,events
Key Features of Streamable HTTP Mode:
http://0.0.0.0:8080/mcp/Stdio mode uses standard input/output for communication and requires environment variables for authentication.
# Option 1: Set environment variables first
export INSTANA_BASE_URL="https://your-instana-instance.instana.io"
export INSTANA_API_TOKEN="your_instana_api_token"
# Start the server (stdio is the default if no transport specified)
mcp-instana
# Or explicitly specify stdio mode
mcp-instana --transport stdio
# Option 2: Pass the base url and api token directly
mcp-instana --base-url https://your-instana-instance.instana.io --api-token your_instana_api_token
# Or with explicit stdio mode
mcp-instana --transport stdio --base-url https://your-instana-instance.instana.io --api-token your_instana_api_token
# Option 1: Set environment variables first
export INSTANA_BASE_URL="https://your-instana-instance.instana.io"
export INSTANA_API_TOKEN="your_instana_api_token"
# Start the server (stdio is the default if no transport specified)
uv run src/core/server.py
# Or explicitly specify stdio mode
uv run src/core/server.py --transport stdio
# Option 2: Pass the base url and api token directly
uv run src/core/server.py --base-url https://your-instana-instance.instana.io --api-token your_instana_api_token
# Or with explicit stdio mode
uv run src/core/server.py --transport stdio --base-url https://your-instana-instance.instana.io --api-token your_instana_api_token
Key Features of Stdio Mode:
export or --env flags)--api-token and base-url flags provides a convenient way to set credentials without modifying shell environmentYou can optimize server performance by enabling only the tools and prompts categories you need:
# List all available categories
mcp-instana --list-tools
# Enable specific categories
mcp-instana --transport streamable-http --tools infra,app
mcp-instana --transport streamable-http --tools events
# List all available categories
uv run src/core/server.py --list-tools
# Enable specific categories
uv run src/core/server.py --transport streamable-http --tools infra,app
uv run src/core/server.py --transport streamable-http --tools events
SSL certificate verification for outgoing Instana API calls is enabled by default. This applies to both Streamable HTTP and Stdio transport modes.
To disable SSL certificate verification (e.g. for environments with self-signed or internal certificates), use the --verify-ssl CLI option, the INSTANA_SSL_VERIFY environment variable, or the sslVerify key in config.yaml.
# Disable SSL verification
uv run src/core/server.py --verify-ssl false
# Explicitly enable (default behaviour, no flag needed)
uv run src/core/server.py --verify-ssl true
export INSTANA_SSL_VERIFY=false
uv run src/core/server.py
SSL verification is disabled when INSTANA_SSL_VERIFY is set to 0, false, or no (case-insensitive). Any other value, or when the variable is unset, keeps verification enabled.
# SSL verification for outbound API calls (default: true)
sslVerify: false
The sslVerify key is read by start.sh at startup and exported as INSTANA_SSL_VERIFY.
When SSL verification is enabled, the system CA bundle is used by default. To use a custom CA certificate bundle, set INSTANA_CA_BUNDLE:
export INSTANA_SSL_VERIFY=true
export INSTANA_CA_BUNDLE=/path/to/ca-bundle.crt
uv run src/core/server.py
INSTANA_CA_BUNDLE is only used when SSL certificate verification is enabled.
The server logs the effective SSL verification state at startup, so you can immediately confirm whether your environment variable, CLI flag, or config file setting was picked up.
Every outgoing Instana API call is subject to a hard wall-clock timeout. If the Instana server does not respond within the deadline the call is cancelled and an error is returned immediately — no indefinitely hanging requests.
The default timeout is 180 seconds. Override it with the INSTANA_API_TIMEOUT environment variable:
export INSTANA_API_TIMEOUT=60 # 60-second deadline
uv run src/core/server.py
INSTANA_API_TIMEOUT must be a positive integer (seconds). Non-integer or non-positive values are ignored and the 180-second default is used instead.
The server caches catalog API responses (metrics, tags, and plugins) in-process to eliminate redundant round-trips. Catalog data is stable within a tenant — it only changes when new integrations are deployed — so responses are safe to reuse across the lifetime of a single server process.
Default TTL: 30 minutes. Each unique combination of tenant URL, method, and parameters gets its own independent cache slot. Error responses are never cached, so a transient network failure cannot poison the store.
| Domain | Operation | Cache key discriminators |
|---|---|---|
| Application | Get metric catalog | — |
| Application | Get tag catalog | use_case, data_source |
| Website | Get metrics catalog | — |
| Website | Get tag catalog | beacon_type, use_case |
| Mobile App | Get metric catalog | — |
| Mobile App | Get tag catalog | beacon_type, use_case |
| Synthetic | Get metrics catalog | — |
| Synthetic | Get tag catalog | use_case |
| Infrastructure | Get metrics catalog | plugin, filter |
| Infrastructure | Get tag catalog | plugin |
Set environment variables before starting the server. In stdio mode these are the only values used — no restart is required when using Bob, as the server reboots automatically.
# Disable caching entirely
export INSTANA_CACHE_ENABLED=false
# Override TTL to 5 minutes (default: 1800)
export INSTANA_CACHE_TTL=300
INSTANA_CACHE_ENABLED is treated as disabled when set to false, 0, or no (case-insensitive). Any other value keeps caching enabled.
In addition to the environment variables above, every HTTP request can override the cache settings via headers. Per-request headers take precedence over the process-level defaults, so caching can be toggled on or off without restarting the server.
instana-cache-enabled: false
instana-cache-ttl: 300
To set cache headers persistently in your MCP client config (e.g. .bob/mcp.json for streamable-http mode), add them alongside the existing Instana headers:
{
"mcpServers": {
"Instana MCP Server": {
"url": "http://localhost:8080/mcp",
"headers": {
"instana-base-url": "https://your-instana-instance.example.com",
"instana-api-token": "YOUR_API_TOKEN",
"instana-cache-enabled": "true",
"instana-cache-ttl": "1800"
}
}
}
}
To disable caching for a specific client connection:
{
"mcpServers": {
"Instana MCP Server": {
"url": "http://localhost:8080/mcp",
"headers": {
"instana-base-url": "https://your-instana-instance.example.com",
"instana-api-token": "YOUR_API_TOKEN",
"instana-cache-enabled": "false"
}
}
}
}
To set cache configuration persistently for Bob, add the env vars to the env block in .bob/mcp.json:
{
"mcpServers": {
"instana": {
"env": {
"INSTANA_CACHE_ENABLED": "true",
"INSTANA_CACHE_TTL": "1800"
}
}
}
}
The server logs the effective cache state at DEBUG level on every catalog call, showing whether a response was a cache HIT or MISS.
Once started, you can verify the server is running:
For Streamable HTTP mode:
# Check MCP server
curl http://0.0.0.0:8080/mcp/
# Or with custom port
curl http://0.0.0.0:9000/mcp/
For Stdio mode: The server will start and wait for stdin input from MCP clients.
SSL / Certificate Issues: See the SSL Certificate Verification section above for configuration options. If you encounter SSL errors with verification enabled and are using macOS, ensure your Python environment has access to system certificates:
# macOS - Install certificates for Python
/Applications/Python\ 3.13/Install\ Certificates.command
Port Already in Use: If port 8080 is already in use, specify a different port:
uv run src/core/server.py --transport streamable-http --port 9000
Missing Dependencies: Ensure all dependencies are installed:
uv sync
| Client | Transports |
|---|---|
| Bob IDE | streamable http, stdio |
| Bob CLI | streamable http, stdio |
| Claude Desktop | streamable http, stdio |
| Kiro IDE | streamable http, stdio |
| Kiro CLI | streamable http, stdio |
| Github Copilot | streamable http, stdio |
| Copilot CLI | streamable http, stdio |
| Mistral AI | streamable http |
You can configure your MCP client to connect to multiple instances. Below is a sample configuration:
{
"mcpServers": {
"Instana MCP Server1": {
"command": "npx",
"args": [
"mcp-remote",
"http://0.0.0.0:8080/mcp/",
"--allow-http",
"--header",
"instana-base-url: ENV1_INSTANA_URL",
"--header",
"instana-api-token: ENV1_INSTANA_API_TOKEN"
]
},
"Instana MCP Server2": {
"command": "npx",
"args": [
"mcp-remote",
"http://0.0.0.0:8080/mcp/",
"--allow-http",
"--header",
"instana-base-url: ENV2_INSTANA_URL",
"--header",
"instana-api-token: ENV2_INSTANA_API_TOKEN"
]
}
}
}
To target a specific server, ensure that:
The request will then be routed to the corresponding configured server. If no server/environment is explicitly mentioned in the prompt, MCP uses the first server defined in the configuration as the default server.
Note: If the requested server is down or unreachable, MCP behaves as expected and forwards the API failure. The user will receive the corresponding error returned by the API, indicating that the server is unavailable. MCP relies on the underlying API availability and does not perform automatic failover.
| Tool | Category | Description |
|---|---|---|
manage_applications |
Application & Infrastructure | Unified tool for managing application metrics, alert configs, settings, and catalog |
manage_websites |
Website Monitoring | Unified smart router for website analyze, catalog, configuration, and advanced config operations |
manage_custom_dashboards |
Custom Dashboards | Unified tool for managing custom dashboard CRUD operations |
manage_infrastructure |
Infrastructure | Unified smart router for infrastructure analyze, catalog (get_plugin_schema), smart alert configurations and snapshot resource operations |
manage_automation |
Automation | Unified smart router for automation: browse action catalog and view execution history |
manage_events |
Events | Unified smart router for events monitoring: get event by ID, get events by IDs, Kubernetes events, agent monitoring events and all events |
manage_slo |
SLO Management | Unified smart router for SLO configurations, reports, alerts, and correction windows with intelligent timezone handling |
manage_releases |
Release Management | Unified smart router for release tracking: list releases with pagination and name filtering, get release details, create/update/delete releases with timezone support |
manage_maintenance_windows |
Maintenance Windows | Unified smart router for maintenance window lifecycle management: create, modify, close, and list maintenance windows with template support and ServiceNow integration |
manage_mobile_apps |
Mobile App Monitoring | Unified smart router for mobile app monitoring: analyze beacons, performance metrics, session replay, configuration, and alert management |
manage_synthetics |
Synthetic Monitoring | Unified smart router for synthetic monitoring: catalog, metrics, settings (read-only), and test playback results |
For detailed tool documentation, capabilities, and technical reference, see Tools & Examples
The MCP server supports selective tool loading to optimize performance and reduce resource usage. You can enable only the tool categories you need for your specific use case.
# Enable only application monitoring tools
mcp-instana --tools app --transport streamable-http
# Enable only infrastructure analysis tools
mcp-instana --tools infra --transport streamable-http
# Enable application and infrastructure tools
mcp-instana --tools app,infra --transport streamable-http
# Enable events and website tools
mcp-instana --tools events,website --transport streamable-http
# Enable settings (custom dashboards) and app tools
mcp-instana --tools settings,app --transport streamable-http
# Enable releases and events tools
mcp-instana --tools releases,events --transport streamable-http
# Enable maintenance window and events tools
mcp-instana --tools maintenance,events --transport streamable-http
# Enable automation and app tools
mcp-instana --tools automation,app --transport streamable-http
# Enable SLO management tools
mcp-instana --tools slo --transport streamable-http
# Enable synthetic monitoring tools
mcp-instana --tools synthetic --transport streamable-http
# Enable mobile app monitoring tools
mcp-instana --tools mobile_app --transport streamable-http
# Enable all tools (default behavior)
mcp-instana --transport streamable-http
# List all available tool categories and their tools
mcp-instana --list-tools
# Enable only application monitoring tools
uv run src/core/server.py --tools app --transport streamable-http
# Enable only infrastructure analysis tools
uv run src/core/server.py --tools infra --transport streamable-http
# Enable application and infrastructure tools
uv run src/core/server.py --tools app,infra --transport streamable-http
# Enable events and website tools
uv run src/core/server.py --tools events,website --transport streamable-http
# Enable settings (custom dashboards) and app tools
uv run src/core/server.py --tools settings,app --transport streamable-http
# Enable releases and events tools
uv run src/core/server.py --tools releases,events --transport streamable-http
# Enable maintenance window and events tools
uv run src/core/server.py --tools maintenance,events --transport streamable-http
# Enable automation and app tools
uv run src/core/server.py --tools automation,app --transport streamable-http
# Enable SLO management tools
uv run src/core/server.py --tools slo --transport streamable-http
# Enable synthetic monitoring tools
uv run src/core/server.py --tools synthetic --transport streamable-http
# Enable mobile app monitoring tools
uv run src/core/server.py --tools mobile_app --transport streamable-http
# Enable all tools (default behavior)
uv run src/core/server.py --transport streamable-http
# List all available tool categories and their tools
uv run src/core/server.py --list-tools
For usage examples and prompts, see Example Prompts
The MCP Instana server can be deployed using Docker for production environments. The Docker setup is optimized for security, performance, and minimal resource usage.
# Ensure you are in the mcp-instana directory of your repo
# Build the optimized production image
docker build -t mcp-instana:latest .
The above command would build the image using the instructions in the Dockerfile. The default port is 8080 and transport mode is streamable-http
# Run the container (credentials are supplied via HTTP headers at request time)
docker run -p 8080:8080 mcp-instana
If you want to use a custom port on your host (ex: 9000)
# Run with a custom host port
docker run -p 9000:8080 mcp-instana
Assuming your started your container using the command: docker run -p 8080:8080 mcp-instana
Your MCP Client would connect to the Host port (8080). By default, the container runs in streamable mode.
Here is a sample configuration for your MCP client:
{
"mcpServers": {
"Instana MCP Server": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp",
"--allow-http",
"--header",
"instana-base-url: https://your-instana-instance.instana.io",
"--header",
"instana-api-token: your_instana_api_token"
]
}
}
}
In stdio mode, you can have your MCP Client to start and connect to the container. Here you are explicitly specifying to run in stdio by providing a value for the --transport flag.
Below is a sample configuration:
{
"mcpServers": {
"Instana MCP Server": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "INSTANA_API_TOKEN=your_instana_api_token",
"-e", "INSTANA_BASE_URL=https://your-instana-instance.instana.io",
"mcp-instana",
"--transport", "stdio"
]
}
}
}
For more details, check the Docker deployment guide here
For comprehensive Docker documentation including multi-architecture builds, .dockerignore, security best practices, and production deployment examples, see DOCKER.md.
GitHub Copilot
mcp.json file and keep only one server running at a time.Certificate Issues
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate:
curl or wget with SSL verification.
/Applications/Python\ 3.13/Install\ Certificates.commandPlease log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by netdata
Delivers real‑time, per‑second infrastructure monitoring with zero‑configuration agents, on‑edge machine‑learning anomaly detection, and built‑in dashboards.
by Arize-ai
Open-source AI observability platform enabling tracing, evaluation, dataset versioning, experiment tracking, prompt management, and interactive playground for LLM applications.
by msgbyte
Provides integrated website traffic analysis, uptime checking, and server health monitoring in a single self‑hosted platform.
by grafana
Provides programmatic access to a Grafana instance and its surrounding ecosystem through the Model Context Protocol, enabling AI assistants and other clients to query and manipulate dashboards, datasources, alerts, incidents, on‑call schedules, and more.
by dynatrace-oss
Provides a local server that enables real‑time interaction with the Dynatrace observability platform, exposing tools for querying data, retrieving problems, sending Slack notifications, and integrating AI assistance.
by pydantic
Provides tools to retrieve and query OpenTelemetry trace and metric data from Pydantic Logfire, allowing LLMs to analyze distributed traces and run arbitrary SQL queries against telemetry records.
by aliyun
Unifies ACK cluster management, native Kubernetes operations, observability, security audit and diagnostic capabilities into a single AI‑native toolset, allowing natural‑language interaction with AI assistants to perform complex container‑oriented AIOps tasks.
by SikamikanikoBG
A self‑hosted, single‑page dashboard that visualizes GPU usage, containers, systemd services, disks, and health across multiple hosts, with a built‑in read‑only MCP server enabling AI agents to query the same data.
by VictoriaMetrics-Community
Provides a Model Context Protocol server exposing read‑only VictoriaMetrics APIs, enabling seamless monitoring, observability, and automation through AI‑driven assistants.