mcp-instana 0.1.1__py3-none-any.whl → 0.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. {mcp_instana-0.1.1.dist-info → mcp_instana-0.2.1.dist-info}/METADATA +460 -139
  2. mcp_instana-0.2.1.dist-info/RECORD +59 -0
  3. src/application/application_analyze.py +373 -160
  4. src/application/application_catalog.py +3 -1
  5. src/application/application_global_alert_config.py +653 -0
  6. src/application/application_metrics.py +6 -2
  7. src/application/application_resources.py +3 -1
  8. src/application/application_settings.py +966 -370
  9. src/application/application_topology.py +6 -2
  10. src/automation/action_catalog.py +416 -0
  11. src/automation/action_history.py +338 -0
  12. src/core/server.py +159 -9
  13. src/core/utils.py +2 -2
  14. src/event/events_tools.py +602 -275
  15. src/infrastructure/infrastructure_analyze.py +7 -3
  16. src/infrastructure/infrastructure_catalog.py +3 -1
  17. src/infrastructure/infrastructure_metrics.py +6 -2
  18. src/infrastructure/infrastructure_resources.py +7 -5
  19. src/infrastructure/infrastructure_topology.py +5 -3
  20. src/prompts/__init__.py +16 -0
  21. src/prompts/application/__init__.py +1 -0
  22. src/prompts/application/application_alerts.py +54 -0
  23. src/prompts/application/application_catalog.py +26 -0
  24. src/prompts/application/application_metrics.py +57 -0
  25. src/prompts/application/application_resources.py +26 -0
  26. src/prompts/application/application_settings.py +75 -0
  27. src/prompts/application/application_topology.py +30 -0
  28. src/prompts/events/__init__.py +1 -0
  29. src/prompts/events/events_tools.py +161 -0
  30. src/prompts/infrastructure/infrastructure_analyze.py +72 -0
  31. src/prompts/infrastructure/infrastructure_catalog.py +53 -0
  32. src/prompts/infrastructure/infrastructure_metrics.py +45 -0
  33. src/prompts/infrastructure/infrastructure_resources.py +74 -0
  34. src/prompts/infrastructure/infrastructure_topology.py +38 -0
  35. src/prompts/settings/__init__.py +0 -0
  36. src/prompts/settings/custom_dashboard.py +157 -0
  37. src/prompts/website/__init__.py +1 -0
  38. src/prompts/website/website_analyze.py +35 -0
  39. src/prompts/website/website_catalog.py +40 -0
  40. src/prompts/website/website_configuration.py +105 -0
  41. src/prompts/website/website_metrics.py +34 -0
  42. src/settings/__init__.py +1 -0
  43. src/settings/custom_dashboard_tools.py +417 -0
  44. src/website/__init__.py +0 -0
  45. src/website/website_analyze.py +433 -0
  46. src/website/website_catalog.py +171 -0
  47. src/website/website_configuration.py +770 -0
  48. src/website/website_metrics.py +241 -0
  49. mcp_instana-0.1.1.dist-info/RECORD +0 -30
  50. src/prompts/mcp_prompts.py +0 -900
  51. src/prompts/prompt_loader.py +0 -29
  52. src/prompts/prompt_registry.json +0 -21
  53. {mcp_instana-0.1.1.dist-info → mcp_instana-0.2.1.dist-info}/WHEEL +0 -0
  54. {mcp_instana-0.1.1.dist-info → mcp_instana-0.2.1.dist-info}/entry_points.txt +0 -0
  55. {mcp_instana-0.1.1.dist-info → mcp_instana-0.2.1.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,124 +1,24 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-instana
3
- Version: 0.1.1
3
+ Version: 0.2.1
4
4
  Summary: MCP server for Instana
5
5
  Author-email: Elina Priyadarshinee <Elina.priyadarshinee1@ibm.com>, Guangya Liu <gyliu@ibm.com>, Isabell Sippli <ischwert@de.ibm.com>, Jay Sharma <Jay.Sharma3@ibm.com>, Madhu Tadiparthi <madhu.tadiparthi@ibm.com>, Riya Kumari <Riya.Kumari3@ibm.com>
6
6
  License: Apache-2.0
7
7
  License-File: LICENSE.md
8
- Requires-Python: >=3.11
9
- Requires-Dist: accelerate==1.6.0
10
- Requires-Dist: aiohappyeyeballs==2.6.1
11
- Requires-Dist: aiohttp==3.12.14
12
- Requires-Dist: aiosignal==1.4.0
13
- Requires-Dist: altair==5.5.0
14
- Requires-Dist: annotated-types==0.7.0
15
- Requires-Dist: anyio==4.9.0
16
- Requires-Dist: attrs==25.3.0
17
- Requires-Dist: blinker==1.9.0
18
- Requires-Dist: cachetools==5.5.2
19
- Requires-Dist: certifi==2025.1.31
20
- Requires-Dist: charset-normalizer==3.4.1
21
- Requires-Dist: click==8.1.8
22
- Requires-Dist: coverage>=7.10.1
23
- Requires-Dist: dataclasses-json==0.6.7
24
- Requires-Dist: fastapi==0.116.1
8
+ Requires-Python: >=3.10
25
9
  Requires-Dist: fastmcp==2.10.3
26
- Requires-Dist: filelock==3.18.0
27
- Requires-Dist: frozenlist==1.5.0
28
- Requires-Dist: fsspec==2025.3.2
29
- Requires-Dist: gitdb==4.0.12
30
- Requires-Dist: gitpython==3.1.44
31
- Requires-Dist: h11==0.16.0
32
- Requires-Dist: httpcore==1.0.9
33
- Requires-Dist: httpx-sse==0.4.0
34
- Requires-Dist: httpx==0.28.1
35
- Requires-Dist: huggingface-hub==0.33.2
36
- Requires-Dist: ibm-cos-sdk-core==2.14.2
37
- Requires-Dist: ibm-cos-sdk-s3transfer==2.14.2
38
- Requires-Dist: ibm-cos-sdk==2.14.2
39
- Requires-Dist: ibm-watsonx-ai==1.3.26
40
- Requires-Dist: idna==3.10
41
10
  Requires-Dist: instana-client==1.0.0
42
- Requires-Dist: jinja2==3.1.6
43
- Requires-Dist: jmespath==1.0.1
44
- Requires-Dist: jsonpatch==1.33
45
- Requires-Dist: jsonpointer==3.0.0
46
- Requires-Dist: jsonschema-pydantic==0.6
47
- Requires-Dist: jsonschema-specifications==2024.10.1
48
- Requires-Dist: jsonschema==4.24.0
49
- Requires-Dist: langchain-community==0.3.21
50
- Requires-Dist: langchain-core==0.3.51
51
- Requires-Dist: langchain-ibm==0.3.13
52
- Requires-Dist: langchain-text-splitters==0.3.8
53
- Requires-Dist: langchain==0.3.23
54
- Requires-Dist: langsmith==0.3.30
55
- Requires-Dist: lomond==0.3.3
56
- Requires-Dist: markdown-it-py==3.0.0
57
- Requires-Dist: markupsafe==3.0.2
58
- Requires-Dist: marshmallow==3.26.1
59
- Requires-Dist: mcp==1.10.1
60
- Requires-Dist: mdurl==0.1.2
61
- Requires-Dist: mpmath==1.3.0
62
- Requires-Dist: multidict==6.4.3
63
- Requires-Dist: mypy-extensions==1.0.0
64
- Requires-Dist: narwhals==1.34.1
65
- Requires-Dist: nest-asyncio==1.6.0
66
- Requires-Dist: networkx==3.4.2
67
- Requires-Dist: numpy==2.2.4
68
- Requires-Dist: orjson==3.10.16
69
- Requires-Dist: packaging==24.2
70
- Requires-Dist: pandas==2.2.3
71
- Requires-Dist: propcache==0.3.1
72
- Requires-Dist: protobuf==5.29.5
73
- Requires-Dist: psutil==7.0.0
74
- Requires-Dist: pyarrow==19.0.1
75
- Requires-Dist: pydantic-core==2.33.2
76
- Requires-Dist: pydantic-settings==2.10.1
77
11
  Requires-Dist: pydantic==2.11.7
78
- Requires-Dist: pydeck==0.9.1
79
- Requires-Dist: pygments==2.19.1
80
- Requires-Dist: pytest-asyncio>=1.1.0
81
- Requires-Dist: pytest-cov>=6.2.1
82
- Requires-Dist: pytest-mock>=3.14.1
83
- Requires-Dist: pytest>=8.4.1
84
- Requires-Dist: python-dateutil==2.9.0.post0
85
12
  Requires-Dist: python-dotenv==1.1.0
86
- Requires-Dist: pytz==2025.2
87
- Requires-Dist: pyyaml==6.0.2
88
- Requires-Dist: referencing==0.36.2
89
- Requires-Dist: regex==2024.11.6
90
- Requires-Dist: requests-toolbelt==1.0.0
91
13
  Requires-Dist: requests==2.32.4
92
- Requires-Dist: rich==14.0.0
93
- Requires-Dist: rpds-py==0.24.0
94
- Requires-Dist: ruff==0.5.0
95
- Requires-Dist: safetensors==0.5.3
96
- Requires-Dist: shellingham==1.5.4
97
- Requires-Dist: six==1.17.0
98
- Requires-Dist: smmap==5.0.2
99
- Requires-Dist: sniffio==1.3.1
100
- Requires-Dist: sqlalchemy==2.0.40
101
- Requires-Dist: sse-starlette==2.2.1
102
- Requires-Dist: starlette==0.47.2
103
- Requires-Dist: streamlit==1.44.1
104
- Requires-Dist: sympy==1.13.1
105
- Requires-Dist: tabulate==0.9.0
106
- Requires-Dist: tenacity==9.1.2
107
- Requires-Dist: tokenizers==0.21.1
108
- Requires-Dist: toml==0.10.2
109
- Requires-Dist: tornado==6.5
110
- Requires-Dist: tqdm==4.67.1
111
- Requires-Dist: transformers==4.53.1
112
- Requires-Dist: typer==0.15.2
113
- Requires-Dist: typing-extensions==4.13.2
114
- Requires-Dist: typing-inspect==0.9.0
115
- Requires-Dist: typing-inspection==0.4.0
116
- Requires-Dist: tzdata==2025.2
117
- Requires-Dist: urllib3==2.5.0
118
- Requires-Dist: uv==0.8.6
119
- Requires-Dist: uvicorn==0.35.0
120
- Requires-Dist: yarl==1.19.0
121
- Requires-Dist: zstandard==0.23.0
14
+ Provides-Extra: dev
15
+ Requires-Dist: coverage>=7.10.1; extra == 'dev'
16
+ Requires-Dist: pytest-asyncio>=1.1.0; extra == 'dev'
17
+ Requires-Dist: pytest-cov>=6.2.1; extra == 'dev'
18
+ Requires-Dist: pytest-mock>=3.14.1; extra == 'dev'
19
+ Requires-Dist: pytest>=8.4.1; extra == 'dev'
20
+ Requires-Dist: ruff==0.5.0; extra == 'dev'
21
+ Requires-Dist: uv==0.8.6; extra == 'dev'
122
22
  Description-Content-Type: text/markdown
123
23
 
124
24
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
@@ -129,14 +29,24 @@ Description-Content-Type: text/markdown
129
29
  - [Architecture Overview](#architecture-overview)
130
30
  - [Workflow](#workflow)
131
31
  - [Prerequisites](#prerequisites)
132
- - [Installing uv](#installing-uv)
133
- - [Setting Up the Environment](#setting-up-the-environment)
32
+ - [Option 1: Install from PyPI (Recommended)](#option-1-install-from-pypi-recommended)
33
+ - [Option 2: Development Installation](#option-2-development-installation)
34
+ - [Installing uv](#installing-uv)
35
+ - [Setting Up the Environment](#setting-up-the-environment)
134
36
  - [Header-Based Authentication for Streamable HTTP Mode](#header-based-authentication-for-streamable-http-mode)
135
37
  - [Starting the Local MCP Server](#starting-the-local-mcp-server)
136
38
  - [Server Command Options](#server-command-options)
39
+ - [Using the CLI (PyPI Installation)](#using-the-cli-pypi-installation)
40
+ - [Using Development Installation](#using-development-installation)
137
41
  - [Starting in Streamable HTTP Mode](#starting-in-streamable-http-mode)
42
+ - [Using CLI (PyPI Installation)](#using-cli-pypi-installation)
43
+ - [Using Development Installation](#using-development-installation-1)
138
44
  - [Starting in Stdio Mode](#starting-in-stdio-mode)
45
+ - [Using CLI (PyPI Installation)](#using-cli-pypi-installation-1)
46
+ - [Using Development Installation](#using-development-installation-2)
139
47
  - [Tool Categories](#tool-categories)
48
+ - [Using CLI (PyPI Installation)](#using-cli-pypi-installation-2)
49
+ - [Using Development Installation](#using-development-installation-3)
140
50
  - [Verifying Server Status](#verifying-server-status)
141
51
  - [Common Startup Issues](#common-startup-issues)
142
52
  - [Setup and Usage](#setup-and-usage)
@@ -151,9 +61,38 @@ Description-Content-Type: text/markdown
151
61
  - [Tool Filtering](#tool-filtering)
152
62
  - [Available Tool Categories](#available-tool-categories)
153
63
  - [Usage Examples](#usage-examples)
64
+ - [Using CLI (PyPI Installation)](#using-cli-pypi-installation-3)
65
+ - [Using Development Installation](#using-development-installation-4)
154
66
  - [Benefits of Tool Filtering](#benefits-of-tool-filtering)
155
67
  - [Example Prompts](#example-prompts)
68
+ - [Docker Deployment](#docker-deployment)
69
+ - [Docker Architecture](#docker-architecture)
70
+ - [**pyproject.toml** (Development)](#pyprojecttoml-development)
71
+ - [**pyproject-runtime.toml** (Production)](#pyproject-runtimetoml-production)
72
+ - [Building the Docker Image](#building-the-docker-image)
73
+ - [**Prerequisites**](#prerequisites-1)
74
+ - [**Build Command**](#build-command)
75
+ - [**What the Build Does**](#what-the-build-does)
76
+ - [Running the Docker Container](#running-the-docker-container)
77
+ - [**Basic Usage**](#basic-usage)
78
+ - [**Environment Variables**](#environment-variables)
79
+ - [**Docker Compose Example**](#docker-compose-example)
80
+ - [Docker Security Features](#docker-security-features)
81
+ - [**Security Best Practices Implemented**](#security-best-practices-implemented)
82
+ - [**Image Size Optimization**](#image-size-optimization)
83
+ - [Testing the Docker Container](#testing-the-docker-container)
84
+ - [**Health Check**](#health-check)
85
+ - [**MCP Inspector Testing**](#mcp-inspector-testing)
86
+ - [**Logs and Debugging**](#logs-and-debugging)
87
+ - [Production Deployment](#production-deployment)
88
+ - [**Recommended Production Setup**](#recommended-production-setup)
89
+ - [**Kubernetes Example**](#kubernetes-example)
156
90
  - [Troubleshooting](#troubleshooting)
91
+ - [**Docker Issues**](#docker-issues)
92
+ - [**Container Won't Start**](#container-wont-start)
93
+ - [**Connection Issues**](#connection-issues)
94
+ - [**Performance Issues**](#performance-issues)
95
+ - [**General Issues**](#general-issues)
157
96
 
158
97
  <!-- END doctoc generated TOC please keep comment here to allow auto update -->
159
98
 
@@ -234,7 +173,21 @@ sequenceDiagram
234
173
 
235
174
  ## Prerequisites
236
175
 
237
- ### Installing uv
176
+ ### Option 1: Install from PyPI (Recommended)
177
+
178
+ The easiest way to use mcp-instana is to install it directly from PyPI:
179
+
180
+ ```shell
181
+ pip install mcp-instana
182
+ ```
183
+
184
+ After installation, you can run the server using the `mcp-instana` command directly.
185
+
186
+ ### Option 2: Development Installation
187
+
188
+ For development or local customization, you can clone and set up the project locally.
189
+
190
+ #### Installing uv
238
191
 
239
192
  This project uses `uv`, a fast Python package installer and resolver. To install `uv`, you have several options:
240
193
 
@@ -250,7 +203,7 @@ brew install uv
250
203
 
251
204
  For more installation options and detailed instructions, visit the [uv documentation](https://github.com/astral-sh/uv).
252
205
 
253
- ### Setting Up the Environment
206
+ #### Setting Up the Environment
254
207
 
255
208
  After installing `uv`, set up the project environment by running:
256
209
 
@@ -282,7 +235,17 @@ Before configuring any MCP client (Claude Desktop, GitHub Copilot, or custom MCP
282
235
 
283
236
  ### Server Command Options
284
237
 
285
- The MCP server (`src/core/server.py`) supports the following command-line options:
238
+ #### Using the CLI (PyPI Installation)
239
+
240
+ If you installed mcp-instana from PyPI, use the `mcp-instana` command:
241
+
242
+ ```bash
243
+ mcp-instana [OPTIONS]
244
+ ```
245
+
246
+ #### Using Development Installation
247
+
248
+ For local development, use the `uv run` command:
286
249
 
287
250
  ```bash
288
251
  uv run src/core/server.py [OPTIONS]
@@ -292,14 +255,35 @@ uv run src/core/server.py [OPTIONS]
292
255
  - `--transport <mode>`: Transport mode (choices: `streamable-http`, `stdio`)
293
256
  - `--debug`: Enable debug mode with additional logging
294
257
  - `--log-level <level>`: Set the logging level (choices: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`)
295
- - `--tools <categories>`: Comma-separated list of tool categories to enable (e.g., `infra,app,events`)
258
+ - `--tools <categories>`: Comma-separated list of tool categories to enable (e.g., infra,app,events,automation,website). Enabling a category will also enable its related prompts. For example: `--tools infra` enables the infra tools and all infra-related prompts.
296
259
  - `--list-tools`: List all available tool categories and exit
297
- - `--port <port>`: Port to listen on (default: 8000)
260
+ - `--port <port>`: Port to listen on (default: 8080)
298
261
  - `--help`: Show help message and exit
299
262
 
300
263
  ### Starting in Streamable HTTP Mode
301
264
 
302
- **Streamable HTTP mode** provides a REST API interface and is recommended for most use cases:
265
+ **Streamable HTTP mode** provides a REST API interface and is recommended for most use cases.
266
+
267
+ #### Using CLI (PyPI Installation)
268
+
269
+ ```bash
270
+ # Start with all tools enabled (default)
271
+ mcp-instana --transport streamable-http
272
+
273
+ # Start with debug logging
274
+ mcp-instana --transport streamable-http --debug
275
+
276
+ # Start with a specific log level
277
+ mcp-instana --transport streamable-http --log-level WARNING
278
+
279
+ # Start with specific tool categories only
280
+ mcp-instana --transport streamable-http --tools infra,events
281
+
282
+ # Combine options (specific log level, custom tools)
283
+ mcp-instana --transport streamable-http --log-level DEBUG --tools app,events
284
+ ```
285
+
286
+ #### Using Development Installation
303
287
 
304
288
  ```bash
305
289
  # Start with all tools enabled (default)
@@ -311,10 +295,10 @@ uv run src/core/server.py --transport streamable-http --debug
311
295
  # Start with a specific log level
312
296
  uv run src/core/server.py --transport streamable-http --log-level WARNING
313
297
 
314
- # Start with specific tool categories only
298
+ # Start with specific tool and prompts categories only
315
299
  uv run src/core/server.py --transport streamable-http --tools infra,events
316
300
 
317
- # Combine options (specific log level, custom tools)
301
+ # Combine options (specific log level, custom tools and prompts)
318
302
  uv run src/core/server.py --transport streamable-http --log-level DEBUG --tools app,events
319
303
  ```
320
304
 
@@ -322,12 +306,28 @@ uv run src/core/server.py --transport streamable-http --log-level DEBUG --tools
322
306
  - Uses HTTP headers for authentication (no environment variables needed)
323
307
  - Supports different credentials per request
324
308
  - Better suited for shared environments
325
- - Default port: 8000
326
- - Endpoint: `http://0.0.0.0:8000/mcp/`
309
+ - Default port: 8080
310
+ - Endpoint: `http://0.0.0.0:8080/mcp/`
327
311
 
328
312
  ### Starting in Stdio Mode
329
313
 
330
- **Stdio mode** uses standard input/output for communication and requires environment variables for authentication:
314
+ **Stdio mode** uses standard input/output for communication and requires environment variables for authentication.
315
+
316
+ #### Using CLI (PyPI Installation)
317
+
318
+ ```bash
319
+ # Set environment variables first
320
+ export INSTANA_BASE_URL="https://your-instana-instance.instana.io"
321
+ export INSTANA_API_TOKEN="your_instana_api_token"
322
+
323
+ # Start the server (stdio is the default if no transport specified)
324
+ mcp-instana
325
+
326
+ # Or explicitly specify stdio mode
327
+ mcp-instana --transport stdio
328
+ ```
329
+
330
+ #### Using Development Installation
331
331
 
332
332
  ```bash
333
333
  # Set environment variables first
@@ -348,7 +348,20 @@ uv run src/core/server.py --transport stdio
348
348
 
349
349
  ### Tool Categories
350
350
 
351
- You can optimize server performance by enabling only the tool categories you need:
351
+ You can optimize server performance by enabling only the tools and prompts categories you need:
352
+
353
+ #### Using CLI (PyPI Installation)
354
+
355
+ ```bash
356
+ # List all available categories
357
+ mcp-instana --list-tools
358
+
359
+ # Enable specific categories
360
+ mcp-instana --transport streamable-http --tools infra,app
361
+ mcp-instana --transport streamable-http --tools events
362
+ ```
363
+
364
+ #### Using Development Installation
352
365
 
353
366
  ```bash
354
367
  # List all available categories
@@ -360,9 +373,11 @@ uv run src/core/server.py --transport streamable-http --tools events
360
373
  ```
361
374
 
362
375
  **Available Categories:**
363
- - **`infra`**: Infrastructure monitoring tools (resources, catalog, topology, analyze, metrics)
364
- - **`app`**: Application performance tools (resources, metrics, alerts, catalog, topology, analyze)
365
- - **`events`**: Event monitoring tools (Kubernetes events, agent monitoring)
376
+ - **`infra`**: Infrastructure monitoring tools and prompts (resources, catalog, topology, analyze, metrics)
377
+ - **`app`**: Application performance tools and prompts (resources, metrics, alerts, catalog, topology, analyze, settings, global alerts)
378
+ - **`events`**: Event monitoring tools and prompts (Kubernetes events, agent monitoring)
379
+ - **`automation`**: Automation-related tools and prompts (action catalog, action history)
380
+ - **`website`**: Website monitoring tools and prompts (metrics, catalog, analyze, configuration)
366
381
 
367
382
  ### Verifying Server Status
368
383
 
@@ -371,7 +386,7 @@ Once started, you can verify the server is running:
371
386
  **For Streamable HTTP mode:**
372
387
  ```bash
373
388
  # Check server health
374
- curl http://0.0.0.0:8000/mcp/
389
+ curl http://0.0.0.0:8080/mcp/
375
390
 
376
391
  # Or with custom port
377
392
  curl http://0.0.0.0:9000/mcp/
@@ -390,7 +405,7 @@ If you encounter SSL certificate errors, ensure your Python environment has acce
390
405
  ```
391
406
 
392
407
  **Port Already in Use:**
393
- If port 8000 is already in use, specify a different port:
408
+ If port 8080 is already in use, specify a different port:
394
409
  ```bash
395
410
  uv run src/core/server.py --transport streamable-http --port 9000
396
411
  ```
@@ -431,7 +446,8 @@ Configure Claude Desktop to pass Instana credentials via headers:
431
446
  "Instana MCP Server": {
432
447
  "command": "npx",
433
448
  "args": [
434
- "mcp-remote", "http://0.0.0.0:8000/mcp/",
449
+ "mcp-remote", "http://0.0.0.0:8080/mcp/",
450
+ "--allow-http",
435
451
  "--header", "instana-base-url: https://your-instana-instance.instana.io",
436
452
  "--header", "instana-api-token: your_instana_api_token"
437
453
  ]
@@ -458,7 +474,26 @@ get me all endpoints from Instana
458
474
 
459
475
  #### Stdio Mode
460
476
 
461
- **Configuration:**
477
+ **Configuration using CLI (PyPI Installation - Recommended):**
478
+
479
+ ```json
480
+ {
481
+ "mcpServers": {
482
+ "Instana MCP Server": {
483
+ "command": "mcp-instana",
484
+ "args": ["--transport", "stdio"],
485
+ "env": {
486
+ "INSTANA_BASE_URL": "https://your-instana-instance.instana.io",
487
+ "INSTANA_API_TOKEN": "your_instana_api_token"
488
+ }
489
+ }
490
+ }
491
+ }
492
+ ```
493
+
494
+ **Note:** If you encounter "command not found" errors, use the full path to mcp-instana. Find it with `which mcp-instana` and use that path instead.
495
+
496
+ **Configuration using Development Installation:**
462
497
 
463
498
  ```json
464
499
  {
@@ -503,7 +538,8 @@ You can directly create or update `.vscode/mcp.json` with the following configur
503
538
  "Instana MCP Server": {
504
539
  "command": "npx",
505
540
  "args": [
506
- "mcp-remote", "http://0.0.0.0:8000/mcp/",
541
+ "mcp-remote", "http://0.0.0.0:8080/mcp/",
542
+ "--allow-http",
507
543
  "--header", "instana-base-url: https://your-instana-instance.instana.io",
508
544
  "--header", "instana-api-token: your_instana_api_token"
509
545
  ],
@@ -527,6 +563,27 @@ You can directly create or update `.vscode/mcp.json` with the following configur
527
563
 
528
564
  **Step 1: Create VS Code MCP Configuration**
529
565
 
566
+ **Using CLI (PyPI Installation - Recommended):**
567
+
568
+ Create `.vscode/mcp.json` in your project root:
569
+
570
+ ```json:.vscode/mcp.json
571
+ {
572
+ "servers": {
573
+ "Instana MCP Server": {
574
+ "command": "mcp-instana",
575
+ "args": ["--transport", "stdio"],
576
+ "env": {
577
+ "INSTANA_BASE_URL": "https://your-instana-instance.instana.io",
578
+ "INSTANA_API_TOKEN": "your_instana_api_token"
579
+ }
580
+ }
581
+ }
582
+ }
583
+ ```
584
+
585
+ **Using Development Installation:**
586
+
530
587
  Create `.vscode/mcp.json` in your project root:
531
588
 
532
589
  ```json:.vscode/mcp.json
@@ -550,8 +607,10 @@ Create `.vscode/mcp.json` in your project root:
550
607
  ```
551
608
 
552
609
  **Note:** Replace the following values with your actual configuration:
553
- - `command`: Update the uv path to match your system's uv installation (e.g., `/path/to/your/uv/bin/uv` or `/usr/local/bin/uv`)
554
- - `--directory`: Update with the absolute path to your mcp-instana project directory
610
+ - For CLI installation: Ensure `mcp-instana` is in your PATH
611
+ - For development installation:
612
+ - `command`: Update the uv path to match your system's uv installation (e.g., `/path/to/your/uv/bin/uv` or `/usr/local/bin/uv`)
613
+ - `--directory`: Update with the absolute path to your mcp-instana project directory
555
614
  - `INSTANA_BASE_URL`: Your Instana instance URL
556
615
  - `INSTANA_API_TOKEN`: Your Instana API token
557
616
 
@@ -617,12 +676,15 @@ Here is an example of a GitHub Copilot response:
617
676
  - [x] Infrastructure Topology
618
677
  - [x] Get Hosts for Snapshot
619
678
  - [x] Get Topology
620
- - [ ] Events
621
- - [ ] Events
622
- - [ ] Get all Events
679
+ - [x] Events
680
+ - [x] Events
681
+ - [x] Get Event
623
682
  - [x] Get Events by IDs
624
683
  - [x] Get Agent Monitoring Events
625
684
  - [x] Get Kubernetes Info Events
685
+ - [x] Get Issues
686
+ - [x] Get Incidents
687
+ - [x] Get Changes
626
688
 
627
689
  ## Available Tools
628
690
 
@@ -665,9 +727,14 @@ Here is an example of a GitHub Copilot response:
665
727
  | `enable_application_alert_config` | Application Alert Configuration| Enable Application Alert Config |
666
728
  | `disable_application_alert_config` | Application Alert Configuration| Disable Smart Alert Config |
667
729
  | `restore_application_alert_config` | Application Alert Configuration| Restore Smart Alert Config |
668
- | `get_event` | Events | Get Events by IDs |
730
+ | `get_event` | Events | Get Specific Event by ID |
669
731
  | `get_kubernetes_info_events` | Events | Get Kubernetes Info Events |
670
732
  | `get_agent_monitoring_events` | Events | Get Agent Monitoring Events |
733
+ | `get_issues` | Events | Get Issues |
734
+ | `get_incidents` | Events | Get Incidents |
735
+ | `get_changes` | Events | Get Changes |
736
+ | `get_events_by_ids` | Events | Get Events by IDs |
737
+
671
738
 
672
739
  ## Tool Filtering
673
740
 
@@ -689,12 +756,45 @@ The MCP server supports selective tool loading to optimize performance and reduc
689
756
  - Application Catalog: Metadata and definitions
690
757
  - Application Topology: Service dependency mapping
691
758
  - Application Analyze: Application performance analysis
759
+ - Application Settings: Configuration management
760
+ - Application Global Alert: Global alert management
692
761
 
693
762
  - **`events`**: Event monitoring tools
694
- - Events: Kubernetes events, agent monitoring, and system event tracking
763
+ - Events: Kubernetes events, agent monitoring, incidents, issues, changes and system event tracking
764
+
765
+ - **`automation`**: Automation-related tools
766
+ - Action Catalog: Automation action discovery and management
767
+ - Action History: Tracking and managing automation action history
768
+
769
+ - **`website`**: Website monitoring tools
770
+ - Website Metrics: Performance measurement for websites
771
+ - Website Catalog: Website metadata and definitions
772
+ - Website Analyze: Website performance analysis
773
+ - Website Configuration: Website configuration management
695
774
 
696
775
  ### Usage Examples
697
776
 
777
+ #### Using CLI (PyPI Installation)
778
+
779
+ ```bash
780
+ # Enable only infrastructure and events tools
781
+ mcp-instana --tools infra,events --transport streamable-http
782
+
783
+ # Enable only application tools
784
+ mcp-instana --tools app --transport streamable-http
785
+
786
+ # Enable automation and website tools
787
+ mcp-instana --tools automation,website --transport streamable-http
788
+
789
+ # Enable all tools (default behavior)
790
+ mcp-instana --transport streamable-http
791
+
792
+ # List all available tool categories and their tools
793
+ mcp-instana --list-tools
794
+ ```
795
+
796
+ #### Using Development Installation
797
+
698
798
  ```bash
699
799
  # Enable only infrastructure and events tools
700
800
  uv run src/core/server.py --tools infra,events --transport streamable-http
@@ -702,6 +802,9 @@ uv run src/core/server.py --tools infra,events --transport streamable-http
702
802
  # Enable only application tools
703
803
  uv run src/core/server.py --tools app --transport streamable-http
704
804
 
805
+ # Enable automation and website tools
806
+ uv run src/core/server.py --tools automation,website --transport streamable-http
807
+
705
808
  # Enable all tools (default behavior)
706
809
  uv run src/core/server.py --transport streamable-http
707
810
 
@@ -895,8 +998,226 @@ The azureManagedHSM plugin provides three metrics that can help monitor service
895
998
  3. Overall Service Availability: This metric measures the availability of the service.
896
999
  ```
897
1000
 
1001
+ ## Docker Deployment
1002
+
1003
+ The MCP Instana server can be deployed using Docker for production environments. The Docker setup is optimized for security, performance, and minimal resource usage.
1004
+
1005
+ ### Docker Architecture
1006
+
1007
+ The project uses a **two-file dependency management strategy**:
1008
+
1009
+ #### **pyproject.toml** (Development)
1010
+ - **Purpose**: Full development environment with all tools
1011
+ - **Dependencies**: 20 essential + 8 development dependencies (pytest, ruff, coverage, etc.)
1012
+ - **Usage**: Local development, testing, and CI/CD
1013
+ - **Size**: Larger but includes all development tools
1014
+
1015
+ #### **pyproject-runtime.toml** (Production)
1016
+ - **Purpose**: Minimal production runtime dependencies only
1017
+ - **Dependencies**: 20 essential dependencies only
1018
+ - **Usage**: Docker production builds
1019
+ - **Size**: Optimized for minimal image size and security
1020
+
1021
+ ### Building the Docker Image
1022
+
1023
+ #### **Prerequisites**
1024
+ - Docker installed and running
1025
+ - Access to the project source code
1026
+
1027
+ #### **Build Command**
1028
+ ```bash
1029
+ # Build the optimized production image
1030
+ docker build -t mcp-instana .
1031
+
1032
+ # Build with a specific tag
1033
+ docker build -t mcp-instana:v1.0.0 .
1034
+ ```
1035
+
1036
+ #### **What the Build Does**
1037
+ 1. **Multi-stage build** for optimal size and security
1038
+ 2. **Builder stage**: Installs only runtime dependencies from `pyproject-runtime.toml`
1039
+ 3. **Runtime stage**: Creates minimal production image with non-root user
1040
+ 4. **Security**: No hardcoded secrets, proper user permissions
1041
+ 5. **Optimization**: Only essential dependencies (20 vs 95+ in development)
1042
+
1043
+ ### Running the Docker Container
1044
+
1045
+ #### **Basic Usage**
1046
+ ```bash
1047
+ # Run with environment variables (recommended)
1048
+ docker run -p 8080:8080 \
1049
+ -e INSTANA_API_TOKEN=your_instana_token \
1050
+ -e INSTANA_BASE_URL=https://your-instana-instance.instana.io \
1051
+ mcp-instana
1052
+
1053
+ # Run with custom port
1054
+ docker run -p 8081:8080 \
1055
+ -e INSTANA_API_TOKEN=your_instana_token \
1056
+ -e INSTANA_BASE_URL=https://your-instana-instance.instana.io \
1057
+ mcp-instana
1058
+ ```
1059
+
1060
+ #### **Environment Variables**
1061
+ The container requires the following environment variables:
1062
+
1063
+ | Variable | Description | Example |
1064
+ |----------|-------------|---------|
1065
+ | `INSTANA_API_TOKEN` | Your Instana API token | `your_instana_token` |
1066
+ | `INSTANA_BASE_URL` | Your Instana instance URL | `https://your-instana-instance.instana.io` |
1067
+ | `PORT` | Server port (optional, defaults to 8080) | `8080` |
1068
+
1069
+ #### **Docker Compose Example**
1070
+ ```yaml
1071
+ version: '3.8'
1072
+ services:
1073
+ mcp-instana:
1074
+ build: .
1075
+ ports:
1076
+ - "8080:8080"
1077
+ environment:
1078
+ - INSTANA_API_TOKEN=${INSTANA_API_TOKEN}
1079
+ - INSTANA_BASE_URL=${INSTANA_BASE_URL}
1080
+ restart: unless-stopped
1081
+ healthcheck:
1082
+ test: ["CMD", "python", "-c", "import requests; requests.get('http://127.0.0.1:8080/health', timeout=5)"]
1083
+ interval: 30s
1084
+ timeout: 10s
1085
+ retries: 3
1086
+ start_period: 40s
1087
+ ```
1088
+
1089
+ ### Docker Security Features
1090
+
1091
+ #### **Security Best Practices Implemented**
1092
+ - ✅ **Non-root user**: Container runs as `mcpuser` (not root)
1093
+ - ✅ **No hardcoded secrets**: All credentials passed via environment variables
1094
+ - ✅ **Minimal dependencies**: Only 20 essential runtime dependencies
1095
+ - ✅ **Multi-stage build**: Build tools don't make it to final image
1096
+ - ✅ **Health checks**: Built-in container health monitoring
1097
+ - ✅ **Optimized base image**: Uses `python:3.11-slim`
1098
+
1099
+ #### **Image Size Optimization**
1100
+ - **Original approach**: 95+ dependencies → ~1-2GB+ image
1101
+ - **Optimized approach**: 20 dependencies → ~266MB image
1102
+ - **Size reduction**: ~70-80% smaller images
1103
+ - **Benefits**: Faster deployments, lower storage costs, reduced attack surface
1104
+
1105
+ ### Testing the Docker Container
1106
+
1107
+ #### **Health Check**
1108
+ ```bash
1109
+ # Check if container is healthy
1110
+ docker ps
1111
+
1112
+ # Test the MCP endpoint
1113
+ curl http://localhost:8080/mcp/
1114
+ ```
1115
+
1116
+ #### **MCP Inspector Testing**
1117
+ ```bash
1118
+ # Test with MCP Inspector
1119
+ npx @modelcontextprotocol/inspector http://localhost:8080/mcp/
1120
+ ```
1121
+
1122
+ #### **Logs and Debugging**
1123
+ ```bash
1124
+ # View container logs
1125
+ docker logs <container_id>
1126
+
1127
+ # Follow logs in real-time
1128
+ docker logs -f <container_id>
1129
+
1130
+ # Execute commands in running container
1131
+ docker exec -it <container_id> /bin/bash
1132
+ ```
1133
+
1134
+ ### Production Deployment
1135
+
1136
+ #### **Recommended Production Setup**
1137
+ 1. **Use environment variables** for all secrets
1138
+ 2. **Set up proper logging** and monitoring
1139
+ 3. **Configure health checks** for container orchestration
1140
+ 4. **Use container orchestration** (Kubernetes, Docker Swarm, etc.)
1141
+ 5. **Implement proper backup** and disaster recovery
1142
+
1143
+ #### **Kubernetes Example**
1144
+ ```yaml
1145
+ apiVersion: apps/v1
1146
+ kind: Deployment
1147
+ metadata:
1148
+ name: mcp-instana
1149
+ spec:
1150
+ replicas: 2
1151
+ selector:
1152
+ matchLabels:
1153
+ app: mcp-instana
1154
+ template:
1155
+ metadata:
1156
+ labels:
1157
+ app: mcp-instana
1158
+ spec:
1159
+ containers:
1160
+ - name: mcp-instana
1161
+ image: mcp-instana:latest
1162
+ ports:
1163
+ - containerPort: 8080
1164
+ env:
1165
+ - name: INSTANA_API_TOKEN
1166
+ valueFrom:
1167
+ secretKeyRef:
1168
+ name: instana-secrets
1169
+ key: api-token
1170
+ - name: INSTANA_BASE_URL
1171
+ value: "https://your-instana-instance.instana.io"
1172
+ livenessProbe:
1173
+ httpGet:
1174
+ path: /health
1175
+ port: 8080
1176
+ initialDelaySeconds: 30
1177
+ periodSeconds: 10
1178
+ readinessProbe:
1179
+ httpGet:
1180
+ path: /health
1181
+ port: 8080
1182
+ initialDelaySeconds: 5
1183
+ periodSeconds: 5
1184
+ ```
1185
+
898
1186
  ## Troubleshooting
899
1187
 
1188
+ ### **Docker Issues**
1189
+
1190
+ #### **Container Won't Start**
1191
+ ```bash
1192
+ # Check container logs
1193
+ docker logs <container_id>
1194
+
1195
+ # Common issues:
1196
+ # 1. Missing environment variables
1197
+ # 2. Port already in use
1198
+ # 3. Invalid Instana credentials
1199
+ ```
1200
+
1201
+ #### **Connection Issues**
1202
+ ```bash
1203
+ # Test container connectivity
1204
+ docker exec -it <container_id> curl http://127.0.0.1:8080/health
1205
+
1206
+ # Check port mapping
1207
+ docker port <container_id>
1208
+ ```
1209
+
1210
+ #### **Performance Issues**
1211
+ ```bash
1212
+ # Check container resource usage
1213
+ docker stats <container_id>
1214
+
1215
+ # Monitor container health
1216
+ docker inspect <container_id> | grep -A 10 Health
1217
+ ```
1218
+
1219
+ ### **General Issues**
1220
+
900
1221
  - **GitHub Copilot**
901
1222
  - If you encounter issues with GitHub Copilot, try starting/stopping/restarting the server in the `mcp.json` file and keep only one server running at a time.
902
1223