mcp-instana 0.2.1__tar.gz → 0.3.1__tar.gz

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 (213) hide show
  1. mcp_instana-0.3.1/.github/workflows/build-multiplatform.yml +37 -0
  2. mcp_instana-0.3.1/.github/workflows/build-windows-container.yml +52 -0
  3. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/.gitignore +1 -0
  4. mcp_instana-0.3.1/Dockerfile +119 -0
  5. mcp_instana-0.2.1/README.md → mcp_instana-0.3.1/PKG-INFO +90 -38
  6. mcp_instana-0.2.1/PKG-INFO → mcp_instana-0.3.1/README.md +66 -61
  7. mcp_instana-0.3.1/build_multiplatform.sh +117 -0
  8. mcp_instana-0.3.1/conftest.py +4 -0
  9. mcp_instana-0.3.1/docs/PRIVACY.md +31 -0
  10. mcp_instana-0.3.1/docs/assets/.gitattributes +1 -0
  11. mcp_instana-0.3.1/docs/assets/instana.png +0 -0
  12. mcp_instana-0.3.1/mcpb/.mcpbignore +2 -0
  13. mcp_instana-0.3.1/mcpb/manifest.json +83 -0
  14. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/mcpb/pack.sh +7 -6
  15. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/pyproject-runtime.toml +1 -1
  16. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/pyproject.toml +5 -7
  17. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/application/application_alert_config.py +45 -12
  18. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/application_analyze.py +28 -6
  19. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/application/application_catalog.py +11 -2
  20. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/application_global_alert_config.py +60 -21
  21. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/application_metrics.py +20 -4
  22. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/application_resources.py +20 -4
  23. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/application_settings.py +111 -35
  24. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/application/application_topology.py +22 -14
  25. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/automation/action_catalog.py +165 -188
  26. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/automation/action_history.py +21 -6
  27. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/core/server.py +7 -1
  28. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/core/utils.py +42 -5
  29. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/event/events_tools.py +30 -7
  30. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/infrastructure/infrastructure_analyze.py +18 -4
  31. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/infrastructure/infrastructure_catalog.py +72 -16
  32. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/infrastructure/infrastructure_metrics.py +5 -1
  33. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/infrastructure/infrastructure_resources.py +30 -11
  34. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/infrastructure/infrastructure_topology.py +10 -2
  35. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/log/log_alert_configuration.py +106 -31
  36. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/settings/custom_dashboard_tools.py +30 -7
  37. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/website/website_analyze.py +10 -2
  38. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/website/website_catalog.py +14 -3
  39. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/src/website/website_configuration.py +54 -13
  40. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/website/website_metrics.py +10 -2
  41. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_analyze.py +8 -8
  42. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_global_alert_config.py +12 -8
  43. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_metrics.py +6 -3
  44. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_resources.py +6 -3
  45. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_settings.py +10 -4
  46. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_topology.py +24 -26
  47. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/automation/test_action_catalog.py +148 -158
  48. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/core/test_utils.py +7 -7
  49. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_settings.py +18 -18
  50. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_topology.py +26 -19
  51. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/conftest.py +0 -1
  52. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/utils/test_base_instana_client.py +1 -1
  53. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/log/test_log_alert_configuration.py +44 -20
  54. mcp_instana-0.3.1/uv.lock +1332 -0
  55. mcp_instana-0.2.1/.bob/mcp.json +0 -3
  56. mcp_instana-0.2.1/.github/workflows/mcpb.yml +0 -43
  57. mcp_instana-0.2.1/Dockerfile +0 -60
  58. mcp_instana-0.2.1/mcp-instana-fixed.mcpb +0 -0
  59. mcp_instana-0.2.1/mcpb/.mcpbignore +0 -179
  60. mcp_instana-0.2.1/mcpb/README.md +0 -1206
  61. mcp_instana-0.2.1/mcpb/manifest.json +0 -62
  62. mcp_instana-0.2.1/mcpb/mcpb.mcpb +0 -0
  63. mcp_instana-0.2.1/mcpb/pyproject.toml +0 -140
  64. mcp_instana-0.2.1/mcpb/src/application/application_alert_config.py +0 -658
  65. mcp_instana-0.2.1/mcpb/src/application/application_catalog.py +0 -155
  66. mcp_instana-0.2.1/mcpb/src/application/application_topology.py +0 -111
  67. mcp_instana-0.2.1/mcpb/src/automation/action_history.py +0 -338
  68. mcp_instana-0.2.1/mcpb/src/core/server.py +0 -668
  69. mcp_instana-0.2.1/mcpb/src/event/events_tools.py +0 -850
  70. mcp_instana-0.2.1/mcpb/src/infrastructure/infrastructure_catalog.py +0 -556
  71. mcp_instana-0.2.1/mcpb/src/infrastructure/infrastructure_topology.py +0 -320
  72. mcp_instana-0.2.1/mcpb/src/settings/custom_dashboard_tools.py +0 -417
  73. mcp_instana-0.2.1/mcpb/src/website/website_analyze.py +0 -433
  74. mcp_instana-0.2.1/mcpb/src/website/website_catalog.py +0 -171
  75. mcp_instana-0.2.1/mcpb/src/website/website_configuration.py +0 -770
  76. mcp_instana-0.2.1/src/__init__.py +0 -0
  77. mcp_instana-0.2.1/src/application/__init__.py +0 -1
  78. mcp_instana-0.2.1/src/application/application_analyze.py +0 -628
  79. mcp_instana-0.2.1/src/application/application_global_alert_config.py +0 -653
  80. mcp_instana-0.2.1/src/application/application_metrics.py +0 -359
  81. mcp_instana-0.2.1/src/application/application_resources.py +0 -371
  82. mcp_instana-0.2.1/src/application/application_settings.py +0 -1731
  83. mcp_instana-0.2.1/src/automation/action_catalog.py +0 -416
  84. mcp_instana-0.2.1/src/core/__init__.py +0 -1
  85. mcp_instana-0.2.1/src/core/utils.py +0 -213
  86. mcp_instana-0.2.1/src/event/__init__.py +0 -1
  87. mcp_instana-0.2.1/src/infrastructure/__init__.py +0 -1
  88. mcp_instana-0.2.1/src/infrastructure/infrastructure_analyze.py +0 -635
  89. mcp_instana-0.2.1/src/infrastructure/infrastructure_metrics.py +0 -171
  90. mcp_instana-0.2.1/src/infrastructure/infrastructure_resources.py +0 -624
  91. mcp_instana-0.2.1/src/log/__init__.py +0 -1
  92. mcp_instana-0.2.1/src/log/log_alert_configuration.py +0 -331
  93. mcp_instana-0.2.1/src/prompts/__init__.py +0 -16
  94. mcp_instana-0.2.1/src/prompts/application/__init__.py +0 -1
  95. mcp_instana-0.2.1/src/prompts/application/application_alerts.py +0 -54
  96. mcp_instana-0.2.1/src/prompts/application/application_catalog.py +0 -26
  97. mcp_instana-0.2.1/src/prompts/application/application_metrics.py +0 -57
  98. mcp_instana-0.2.1/src/prompts/application/application_resources.py +0 -26
  99. mcp_instana-0.2.1/src/prompts/application/application_settings.py +0 -75
  100. mcp_instana-0.2.1/src/prompts/application/application_topology.py +0 -30
  101. mcp_instana-0.2.1/src/prompts/events/__init__.py +0 -1
  102. mcp_instana-0.2.1/src/prompts/events/events_tools.py +0 -161
  103. mcp_instana-0.2.1/src/prompts/infrastructure/infrastructure_analyze.py +0 -72
  104. mcp_instana-0.2.1/src/prompts/infrastructure/infrastructure_catalog.py +0 -53
  105. mcp_instana-0.2.1/src/prompts/infrastructure/infrastructure_metrics.py +0 -45
  106. mcp_instana-0.2.1/src/prompts/infrastructure/infrastructure_resources.py +0 -74
  107. mcp_instana-0.2.1/src/prompts/infrastructure/infrastructure_topology.py +0 -38
  108. mcp_instana-0.2.1/src/prompts/settings/__init__.py +0 -0
  109. mcp_instana-0.2.1/src/prompts/settings/custom_dashboard.py +0 -157
  110. mcp_instana-0.2.1/src/prompts/website/__init__.py +0 -1
  111. mcp_instana-0.2.1/src/prompts/website/website_analyze.py +0 -35
  112. mcp_instana-0.2.1/src/prompts/website/website_catalog.py +0 -40
  113. mcp_instana-0.2.1/src/prompts/website/website_configuration.py +0 -105
  114. mcp_instana-0.2.1/src/prompts/website/website_metrics.py +0 -34
  115. mcp_instana-0.2.1/src/settings/__init__.py +0 -1
  116. mcp_instana-0.2.1/src/website/__init__.py +0 -0
  117. mcp_instana-0.2.1/src/website/website_metrics.py +0 -241
  118. mcp_instana-0.2.1/uv.lock +0 -1211
  119. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/.github/dco.yml +0 -0
  120. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/.github/workflows/ci.yml +0 -0
  121. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/CONTRIBUTING.md +0 -0
  122. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/LICENSE.md +0 -0
  123. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/architecture.png +0 -0
  124. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/call_tools.png +0 -0
  125. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/claudeResponse.png +0 -0
  126. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/claudeTools.png +0 -0
  127. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/copilot.png +0 -0
  128. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/copilotResponse.png +0 -0
  129. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/kubernetesEvents.png +0 -0
  130. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/mcpInstanaFlow.png +0 -0
  131. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/images/query_events.png +0 -0
  132. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/pyrightconfig.json +0 -0
  133. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/run_ruff_check.sh +0 -0
  134. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/__init__.py +0 -0
  135. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/application/__init__.py +0 -0
  136. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/core/__init__.py +0 -0
  137. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/event/__init__.py +0 -0
  138. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/infrastructure/__init__.py +0 -0
  139. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/log/__init__.py +0 -0
  140. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/__init__.py +0 -0
  141. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/__init__.py +0 -0
  142. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_alerts.py +0 -0
  143. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_catalog.py +0 -0
  144. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_metrics.py +0 -0
  145. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_resources.py +0 -0
  146. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_settings.py +0 -0
  147. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/application/application_topology.py +0 -0
  148. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/events/__init__.py +0 -0
  149. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/events/events_tools.py +0 -0
  150. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/infrastructure/infrastructure_analyze.py +0 -0
  151. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/infrastructure/infrastructure_catalog.py +0 -0
  152. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/infrastructure/infrastructure_metrics.py +0 -0
  153. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/infrastructure/infrastructure_resources.py +0 -0
  154. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/infrastructure/infrastructure_topology.py +0 -0
  155. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/settings/__init__.py +0 -0
  156. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/settings/custom_dashboard.py +0 -0
  157. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/website/__init__.py +0 -0
  158. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/website/website_analyze.py +0 -0
  159. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/website/website_catalog.py +0 -0
  160. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/website/website_configuration.py +0 -0
  161. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/prompts/website/website_metrics.py +0 -0
  162. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/settings/__init__.py +0 -0
  163. {mcp_instana-0.2.1/mcpb → mcp_instana-0.3.1}/src/website/__init__.py +0 -0
  164. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/README.md +0 -0
  165. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/__init__.py +0 -0
  166. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/__init__.py +0 -0
  167. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_alert_config.py +0 -0
  168. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/application/test_application_catalog.py +0 -0
  169. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/automation/__init__.py +0 -0
  170. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/core/__init__.py +0 -0
  171. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/core/test_server.py +0 -0
  172. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/README.md +0 -0
  173. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/__init__.py +0 -0
  174. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_alert_config.py +0 -0
  175. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_analyze.py +0 -0
  176. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_catalog.py +0 -0
  177. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_metrics.py +0 -0
  178. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/application/test_application_resources.py +0 -0
  179. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/event/test_events_tools.py +0 -0
  180. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/infrastructure/test_infrastructure_analyze.py +0 -0
  181. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/infrastructure/test_infrastructure_catalog.py +0 -0
  182. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/infrastructure/test_infrastructure_metrics.py +0 -0
  183. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/infrastructure/test_infrastructure_resources.py +0 -0
  184. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/infrastructure/test_infrastructure_topology.py +0 -0
  185. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/pytest.ini +0 -0
  186. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/run_e2e_tests.py +0 -0
  187. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/e2e/server/test_server_integration.py +0 -0
  188. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/event/__init__.py +0 -0
  189. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/event/test_events_tools.py +0 -0
  190. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/__init__.py +0 -0
  191. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/test_infrastructure_analyze.py +0 -0
  192. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/test_infrastructure_catalog.py +0 -0
  193. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/test_infrastructure_metrics.py +0 -0
  194. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/test_infrastructure_resources.py +0 -0
  195. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/infrastructure/test_infrastructure_topology.py +0 -0
  196. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/log/__init__.py +0 -0
  197. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/__init__.py +0 -0
  198. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/__init__.py +0 -0
  199. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_alerts.py +0 -0
  200. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_catalog.py +0 -0
  201. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_metrics.py +0 -0
  202. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_resources.py +0 -0
  203. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_settings.py +0 -0
  204. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/application/test_application_topology.py +0 -0
  205. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/events/test_events_tools.py +0 -0
  206. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/__init__.py +0 -0
  207. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/test_infrastructure_analyze.py +0 -0
  208. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/test_infrastructure_catalog.py +0 -0
  209. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/test_infrastructure_metrics.py +0 -0
  210. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/test_infrastructure_resources.py +0 -0
  211. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/prompts/infrastructure/test_infrastructure_topology.py +0 -0
  212. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/run_all_tests.py +0 -0
  213. {mcp_instana-0.2.1 → mcp_instana-0.3.1}/tests/run_all_tests_with_coverage.py +0 -0
@@ -0,0 +1,37 @@
1
+ name: Build Multi-Platform Linux Container
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ tag:
7
+ description: 'Image tag'
8
+ required: true
9
+ default: 'latest'
10
+
11
+ jobs:
12
+ build-linux:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v3
17
+
18
+ - name: Set up QEMU
19
+ uses: docker/setup-qemu-action@v2
20
+
21
+ - name: Set up Docker Buildx
22
+ uses: docker/setup-buildx-action@v2
23
+
24
+ - name: Login to DockerHub
25
+ uses: docker/login-action@v2
26
+ with:
27
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
28
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
29
+
30
+ - name: Build and push Linux images
31
+ uses: docker/build-push-action@v4
32
+ with:
33
+ context: .
34
+ file: ./Dockerfile
35
+ platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/ppc64le,linux/s390x
36
+ push: true
37
+ tags: jaysharma3/mcp-instana:${{ github.event.inputs.tag }}
@@ -0,0 +1,52 @@
1
+ name: Build Multi-Platform Container
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ tag:
7
+ description: 'Image tag'
8
+ required: true
9
+ default: 'latest'
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: windows-latest
14
+ steps:
15
+ - name: Checkout code
16
+ uses: actions/checkout@v3
17
+
18
+ - name: Set up Docker Buildx
19
+ uses: docker/setup-buildx-action@v2
20
+
21
+ - name: Login to DockerHub
22
+ uses: docker/login-action@v2
23
+ with:
24
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
25
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
26
+
27
+ - name: Build and push Windows image
28
+ uses: docker/build-push-action@v4
29
+ with:
30
+ context: .
31
+ file: ./Dockerfile.windows
32
+ platforms: windows/amd64
33
+ push: true
34
+ tags: jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-windows
35
+
36
+ - name: Create and push manifest
37
+ if: success()
38
+ shell: bash
39
+ run: |
40
+ # Pull the Linux image to check if it exists
41
+ if docker manifest inspect jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-linux > /dev/null 2>&1; then
42
+ echo "Creating manifest with both Linux and Windows images"
43
+ docker manifest create jaysharma3/mcp-instana:${{ github.event.inputs.tag }} \
44
+ jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-linux \
45
+ jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-windows
46
+ docker manifest push jaysharma3/mcp-instana:${{ github.event.inputs.tag }}
47
+ else
48
+ echo "Linux image not found. Creating manifest with Windows image only"
49
+ docker manifest create jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-windows-only \
50
+ jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-windows
51
+ docker manifest push jaysharma3/mcp-instana:${{ github.event.inputs.tag }}-windows-only
52
+ fi
@@ -178,3 +178,4 @@ cython_debug/
178
178
  # Ignore tooling dirs
179
179
  .Bob/
180
180
  .vscode/
181
+ mcp-instana.mcpb
@@ -0,0 +1,119 @@
1
+ # Multi-platform Linux Dockerfile
2
+ #
3
+ # This Dockerfile supports multiple Linux platforms:
4
+ # - Linux AMD64 (x86_64): Standard Intel/AMD processors on Linux
5
+ # - Linux ARM64 (aarch64): Apple Silicon, AWS Graviton, Raspberry Pi 4
6
+ # - Linux ARM/v7: Older ARM devices like Raspberry Pi 2/3
7
+ # - Linux 386: 32-bit x86 systems
8
+ # - Linux PPC64LE: PowerPC 64-bit Little Endian
9
+ # - Linux s390x: IBM Z mainframes
10
+ #
11
+ # To create a multi-architecture image that works on any platform:
12
+ #
13
+ # 1. Set up Docker BuildKit builder if you haven't already:
14
+ # docker buildx create --name multiarch --driver docker-container --use
15
+ #
16
+ # 2. Build and push a multi-architecture image to a registry:
17
+ # docker buildx build --platform linux/amd64,linux/arm64 -t username/mcp-instana:latest --push .
18
+ #
19
+ # 3. Pull and run the image on any platform:
20
+ # docker pull username/mcp-instana:latest
21
+ # docker run -p 8080:8080 username/mcp-instana:latest
22
+ #
23
+ # The image will automatically use the correct architecture version for the host system.
24
+ #
25
+ # Note: The --push flag is required for multi-architecture builds as Docker needs to
26
+ # create a manifest list in a registry. If you want to load the image locally for testing,
27
+ # you can only build for your current architecture:
28
+ # docker buildx build --platform linux/amd64 -t mcp-instana:latest --load .
29
+ #
30
+ # For CI/CD pipelines (e.g., GitHub Actions):
31
+ # ```yaml
32
+ # jobs:
33
+ # build-push:
34
+ # runs-on: ubuntu-latest
35
+ # steps:
36
+ # - name: Checkout code
37
+ # uses: actions/checkout@v3
38
+ #
39
+ # - name: Set up QEMU
40
+ # uses: docker/setup-qemu-action@v2
41
+ #
42
+ # - name: Set up Docker Buildx
43
+ # uses: docker/setup-buildx-action@v2
44
+ #
45
+ # - name: Login to DockerHub
46
+ # uses: docker/login-action@v2
47
+ # with:
48
+ # username: ${{ secrets.DOCKERHUB_USERNAME }}
49
+ # password: ${{ secrets.DOCKERHUB_TOKEN }}
50
+ #
51
+ # - name: Build and push
52
+ # uses: docker/build-push-action@v4
53
+ # with:
54
+ # context: .
55
+ # platforms: linux/amd64,linux/arm64
56
+ # push: true
57
+ # tags: username/mcp-instana:latest
58
+ # ```
59
+ #
60
+ # Stage 1: Build stage with minimal runtime dependencies
61
+ FROM --platform=${BUILDPLATFORM:-linux/arm64} docker.io/library/python:3.11-slim AS builder
62
+
63
+ # Install system dependencies needed for building
64
+ RUN apt-get update && apt-get install -y --no-install-recommends \
65
+ gcc \
66
+ g++ \
67
+ && rm -rf /var/lib/apt/lists/*
68
+
69
+ # Set working directory
70
+ WORKDIR /app
71
+
72
+ # Copy only the runtime dependency file and source code needed for the build
73
+ COPY pyproject-runtime.toml pyproject.toml
74
+ COPY src ./src
75
+ COPY README.md ./
76
+
77
+ # Install uv for dependency management
78
+ RUN pip install --no-cache-dir uv
79
+
80
+ # Install only runtime dependencies using the minimal pyproject-runtime.toml
81
+ RUN uv pip install --no-cache-dir --system .
82
+
83
+ # Stage 2: Runtime stage
84
+ FROM python:3.11-slim AS runtime
85
+
86
+ # Set working directory
87
+ WORKDIR /app
88
+
89
+ # Create a non-root user for security
90
+ RUN groupadd -r mcpuser && useradd -r -g mcpuser mcpuser
91
+
92
+ # Copy only the Python packages from builder (no source code needed)
93
+ COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
94
+ COPY --from=builder /usr/local/bin /usr/local/bin
95
+
96
+ # Copy only the source code needed for runtime
97
+ COPY src ./src
98
+
99
+ # Set ownership to non-root user
100
+ RUN chown -R mcpuser:mcpuser /app
101
+
102
+ # Switch to non-root user
103
+ USER mcpuser
104
+
105
+ # Expose the default port (configurable via PORT env var)
106
+ EXPOSE 8080
107
+
108
+ # Set environment variables (no hardcoded secrets)
109
+ ENV PYTHONPATH=/app
110
+ ENV PYTHONUNBUFFERED=1
111
+ ENV PORT=8080
112
+
113
+ # Health check using container's internal network
114
+ HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
115
+ CMD python -c "import requests; requests.get('http://127.0.0.1:8080/health', timeout=5)" || exit 1
116
+
117
+ # Run the server
118
+ ENTRYPOINT ["python", "-m", "src.core.server"]
119
+ CMD ["--transport", "streamable-http"]
@@ -1,5 +1,30 @@
1
+ Metadata-Version: 2.4
2
+ Name: mcp-instana
3
+ Version: 0.3.1
4
+ Summary: MCP server for Instana
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
+ License: Apache-2.0
7
+ License-File: LICENSE.md
8
+ Requires-Python: >=3.10
9
+ Requires-Dist: fastmcp==2.10.3
10
+ Requires-Dist: instana-client==1.0.1
11
+ Requires-Dist: mcp
12
+ Requires-Dist: pydantic==2.11.7
13
+ Requires-Dist: python-dotenv==1.1.0
14
+ Requires-Dist: requests==2.32.4
15
+ Provides-Extra: dev
16
+ Requires-Dist: coverage>=7.10.1; extra == 'dev'
17
+ Requires-Dist: pytest-asyncio>=1.1.0; extra == 'dev'
18
+ Requires-Dist: pytest-cov>=6.2.1; extra == 'dev'
19
+ Requires-Dist: pytest-mock>=3.14.1; extra == 'dev'
20
+ Requires-Dist: pytest>=8.4.1; extra == 'dev'
21
+ Requires-Dist: ruff==0.5.0; extra == 'dev'
22
+ Requires-Dist: uv==0.8.6; extra == 'dev'
23
+ Description-Content-Type: text/markdown
24
+
1
25
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
2
26
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
27
+ <!-- mcp-name: io.github.instana/mcp-instana -->
3
28
  **Table of Contents**
4
29
 
5
30
  - [MCP Server for IBM Instana](#mcp-server-for-ibm-instana)
@@ -54,6 +79,10 @@
54
79
  - [**Basic Usage**](#basic-usage)
55
80
  - [**Environment Variables**](#environment-variables)
56
81
  - [**Docker Compose Example**](#docker-compose-example)
82
+ - [Multi-Architecture Support](#multi-architecture-support)
83
+ - [**Supported Architectures**](#supported-architectures)
84
+ - [**Benefits of Multi-Architecture Images**](#benefits-of-multi-architecture-images)
85
+ - [**How It Works**](#how-it-works)
57
86
  - [Docker Security Features](#docker-security-features)
58
87
  - [**Security Best Practices Implemented**](#security-best-practices-implemented)
59
88
  - [**Image Size Optimization**](#image-size-optimization)
@@ -1000,16 +1029,40 @@ The project uses a **two-file dependency management strategy**:
1000
1029
  #### **Prerequisites**
1001
1030
  - Docker installed and running
1002
1031
  - Access to the project source code
1032
+ - Docker BuildKit for multi-architecture builds (enabled by default in recent Docker versions)
1003
1033
 
1004
1034
  #### **Build Command**
1035
+
1036
+ **Single Architecture Build (Default):**
1005
1037
  ```bash
1006
- # Build the optimized production image
1007
- docker build -t mcp-instana .
1038
+ # Build for your local architecture (automatic detection)
1039
+ docker build -t mcp-instana:latest .
1008
1040
 
1009
1041
  # Build with a specific tag
1010
1042
  docker build -t mcp-instana:v1.0.0 .
1011
1043
  ```
1012
1044
 
1045
+ **Multi-Architecture Build:**
1046
+ ```bash
1047
+ # Set up Docker BuildKit builder if you haven't already
1048
+ docker buildx create --name multiarch --driver docker-container --use
1049
+
1050
+ # Build and push a multi-architecture image to a registry
1051
+ docker buildx build --platform linux/amd64,linux/arm64 -t username/mcp-instana:latest --push .
1052
+ ```
1053
+
1054
+ **Using the Helper Script:**
1055
+ ```bash
1056
+ # Make the script executable
1057
+ chmod +x build_multiarch.sh
1058
+
1059
+ # Build for local architecture
1060
+ ./build_multiarch.sh
1061
+
1062
+ # Build and push multi-architecture image
1063
+ ./build_multiarch.sh --registry username/ --push
1064
+ ```
1065
+
1013
1066
  #### **What the Build Does**
1014
1067
  1. **Multi-stage build** for optimal size and security
1015
1068
  2. **Builder stage**: Installs only runtime dependencies from `pyproject-runtime.toml`
@@ -1021,27 +1074,14 @@ docker build -t mcp-instana:v1.0.0 .
1021
1074
 
1022
1075
  #### **Basic Usage**
1023
1076
  ```bash
1024
- # Run with environment variables (recommended)
1025
- docker run -p 8080:8080 \
1026
- -e INSTANA_API_TOKEN=your_instana_token \
1027
- -e INSTANA_BASE_URL=https://your-instana-instance.instana.io \
1028
- mcp-instana
1077
+ # Run the container (no credentials needed in the container)
1078
+ docker run -p 8080:8080 mcp-instana
1029
1079
 
1030
1080
  # Run with custom port
1031
- docker run -p 8081:8080 \
1032
- -e INSTANA_API_TOKEN=your_instana_token \
1033
- -e INSTANA_BASE_URL=https://your-instana-instance.instana.io \
1034
- mcp-instana
1081
+ docker run -p 8081:8080 mcp-instana
1035
1082
  ```
1036
1083
 
1037
- #### **Environment Variables**
1038
- The container requires the following environment variables:
1039
1084
 
1040
- | Variable | Description | Example |
1041
- |----------|-------------|---------|
1042
- | `INSTANA_API_TOKEN` | Your Instana API token | `your_instana_token` |
1043
- | `INSTANA_BASE_URL` | Your Instana instance URL | `https://your-instana-instance.instana.io` |
1044
- | `PORT` | Server port (optional, defaults to 8080) | `8080` |
1045
1085
 
1046
1086
  #### **Docker Compose Example**
1047
1087
  ```yaml
@@ -1051,9 +1091,6 @@ services:
1051
1091
  build: .
1052
1092
  ports:
1053
1093
  - "8080:8080"
1054
- environment:
1055
- - INSTANA_API_TOKEN=${INSTANA_API_TOKEN}
1056
- - INSTANA_BASE_URL=${INSTANA_BASE_URL}
1057
1094
  restart: unless-stopped
1058
1095
  healthcheck:
1059
1096
  test: ["CMD", "python", "-c", "import requests; requests.get('http://127.0.0.1:8080/health', timeout=5)"]
@@ -1063,15 +1100,35 @@ services:
1063
1100
  start_period: 40s
1064
1101
  ```
1065
1102
 
1103
+ ### Multi-Architecture Support
1104
+
1105
+ The Docker image supports multiple processor architectures, making it portable across different environments:
1106
+
1107
+ #### **Supported Architectures**
1108
+ - ✅ **amd64/x86_64**: Standard Intel/AMD processors (Windows, Linux, most cloud VMs)
1109
+ - ✅ **arm64/aarch64**: Apple Silicon (M1/M2/M3), AWS Graviton, Raspberry Pi 4, etc.
1110
+
1111
+ #### **Benefits of Multi-Architecture Images**
1112
+ - **Cross-Platform Compatibility**: Run the same image on any supported architecture
1113
+ - **Seamless Deployment**: No need to build different images for different environments
1114
+ - **CI/CD Simplification**: Build once, deploy anywhere
1115
+ - **Cloud Flexibility**: Switch between cloud providers and instance types without rebuilding images
1116
+
1117
+ #### **How It Works**
1118
+ 1. The multi-architecture image is a "manifest list" containing images for each architecture
1119
+ 2. When you pull the image, Docker automatically selects the correct architecture for your system
1120
+ 3. The image runs natively on your architecture without emulation, ensuring optimal performance
1121
+
1066
1122
  ### Docker Security Features
1067
1123
 
1068
1124
  #### **Security Best Practices Implemented**
1069
1125
  - ✅ **Non-root user**: Container runs as `mcpuser` (not root)
1070
- - ✅ **No hardcoded secrets**: All credentials passed via environment variables
1126
+ - ✅ **No secrets in container**: Credentials are passed via HTTP headers from clients, not stored in the container
1071
1127
  - ✅ **Minimal dependencies**: Only 20 essential runtime dependencies
1072
1128
  - ✅ **Multi-stage build**: Build tools don't make it to final image
1073
1129
  - ✅ **Health checks**: Built-in container health monitoring
1074
1130
  - ✅ **Optimized base image**: Uses `python:3.11-slim`
1131
+ - ✅ **Multi-architecture support**: Run natively on any supported platform
1075
1132
 
1076
1133
  #### **Image Size Optimization**
1077
1134
  - **Original approach**: 95+ dependencies → ~1-2GB+ image
@@ -1111,11 +1168,12 @@ docker exec -it <container_id> /bin/bash
1111
1168
  ### Production Deployment
1112
1169
 
1113
1170
  #### **Recommended Production Setup**
1114
- 1. **Use environment variables** for all secrets
1115
- 2. **Set up proper logging** and monitoring
1116
- 3. **Configure health checks** for container orchestration
1117
- 4. **Use container orchestration** (Kubernetes, Docker Swarm, etc.)
1118
- 5. **Implement proper backup** and disaster recovery
1171
+ 1. **Run container without credentials** - The container runs in Streamable HTTP mode, so no Instana credentials are needed in the container
1172
+ 2. **Configure clients with credentials** - Pass Instana credentials via HTTP headers from MCP clients (Claude Desktop, GitHub Copilot, etc.)
1173
+ 3. **Set up proper logging** and monitoring
1174
+ 4. **Configure health checks** for container orchestration
1175
+ 5. **Use container orchestration** (Kubernetes, Docker Swarm, etc.)
1176
+ 6. **Implement proper backup** and disaster recovery
1119
1177
 
1120
1178
  #### **Kubernetes Example**
1121
1179
  ```yaml
@@ -1138,14 +1196,6 @@ spec:
1138
1196
  image: mcp-instana:latest
1139
1197
  ports:
1140
1198
  - containerPort: 8080
1141
- env:
1142
- - name: INSTANA_API_TOKEN
1143
- valueFrom:
1144
- secretKeyRef:
1145
- name: instana-secrets
1146
- key: api-token
1147
- - name: INSTANA_BASE_URL
1148
- value: "https://your-instana-instance.instana.io"
1149
1199
  livenessProbe:
1150
1200
  httpGet:
1151
1201
  path: /health
@@ -1170,9 +1220,11 @@ spec:
1170
1220
  docker logs <container_id>
1171
1221
 
1172
1222
  # Common issues:
1173
- # 1. Missing environment variables
1174
- # 2. Port already in use
1175
- # 3. Invalid Instana credentials
1223
+ # 1. Port already in use
1224
+ # 2. Invalid container image
1225
+ # 3. Missing dependencies
1226
+
1227
+ # Credentials are passed via HTTP headers from the MCP client
1176
1228
  ```
1177
1229
 
1178
1230
  #### **Connection Issues**
@@ -1,28 +1,6 @@
1
- Metadata-Version: 2.4
2
- Name: mcp-instana
3
- Version: 0.2.1
4
- Summary: MCP server for Instana
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
- License: Apache-2.0
7
- License-File: LICENSE.md
8
- Requires-Python: >=3.10
9
- Requires-Dist: fastmcp==2.10.3
10
- Requires-Dist: instana-client==1.0.0
11
- Requires-Dist: pydantic==2.11.7
12
- Requires-Dist: python-dotenv==1.1.0
13
- Requires-Dist: requests==2.32.4
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'
22
- Description-Content-Type: text/markdown
23
-
24
1
  <!-- START doctoc generated TOC please keep comment here to allow auto update -->
25
2
  <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
3
+ <!-- mcp-name: io.github.instana/mcp-instana -->
26
4
  **Table of Contents**
27
5
 
28
6
  - [MCP Server for IBM Instana](#mcp-server-for-ibm-instana)
@@ -77,6 +55,10 @@ Description-Content-Type: text/markdown
77
55
  - [**Basic Usage**](#basic-usage)
78
56
  - [**Environment Variables**](#environment-variables)
79
57
  - [**Docker Compose Example**](#docker-compose-example)
58
+ - [Multi-Architecture Support](#multi-architecture-support)
59
+ - [**Supported Architectures**](#supported-architectures)
60
+ - [**Benefits of Multi-Architecture Images**](#benefits-of-multi-architecture-images)
61
+ - [**How It Works**](#how-it-works)
80
62
  - [Docker Security Features](#docker-security-features)
81
63
  - [**Security Best Practices Implemented**](#security-best-practices-implemented)
82
64
  - [**Image Size Optimization**](#image-size-optimization)
@@ -1023,16 +1005,40 @@ The project uses a **two-file dependency management strategy**:
1023
1005
  #### **Prerequisites**
1024
1006
  - Docker installed and running
1025
1007
  - Access to the project source code
1008
+ - Docker BuildKit for multi-architecture builds (enabled by default in recent Docker versions)
1026
1009
 
1027
1010
  #### **Build Command**
1011
+
1012
+ **Single Architecture Build (Default):**
1028
1013
  ```bash
1029
- # Build the optimized production image
1030
- docker build -t mcp-instana .
1014
+ # Build for your local architecture (automatic detection)
1015
+ docker build -t mcp-instana:latest .
1031
1016
 
1032
1017
  # Build with a specific tag
1033
1018
  docker build -t mcp-instana:v1.0.0 .
1034
1019
  ```
1035
1020
 
1021
+ **Multi-Architecture Build:**
1022
+ ```bash
1023
+ # Set up Docker BuildKit builder if you haven't already
1024
+ docker buildx create --name multiarch --driver docker-container --use
1025
+
1026
+ # Build and push a multi-architecture image to a registry
1027
+ docker buildx build --platform linux/amd64,linux/arm64 -t username/mcp-instana:latest --push .
1028
+ ```
1029
+
1030
+ **Using the Helper Script:**
1031
+ ```bash
1032
+ # Make the script executable
1033
+ chmod +x build_multiarch.sh
1034
+
1035
+ # Build for local architecture
1036
+ ./build_multiarch.sh
1037
+
1038
+ # Build and push multi-architecture image
1039
+ ./build_multiarch.sh --registry username/ --push
1040
+ ```
1041
+
1036
1042
  #### **What the Build Does**
1037
1043
  1. **Multi-stage build** for optimal size and security
1038
1044
  2. **Builder stage**: Installs only runtime dependencies from `pyproject-runtime.toml`
@@ -1044,27 +1050,14 @@ docker build -t mcp-instana:v1.0.0 .
1044
1050
 
1045
1051
  #### **Basic Usage**
1046
1052
  ```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
1053
+ # Run the container (no credentials needed in the container)
1054
+ docker run -p 8080:8080 mcp-instana
1052
1055
 
1053
1056
  # 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
1057
+ docker run -p 8081:8080 mcp-instana
1058
1058
  ```
1059
1059
 
1060
- #### **Environment Variables**
1061
- The container requires the following environment variables:
1062
1060
 
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
1061
 
1069
1062
  #### **Docker Compose Example**
1070
1063
  ```yaml
@@ -1074,9 +1067,6 @@ services:
1074
1067
  build: .
1075
1068
  ports:
1076
1069
  - "8080:8080"
1077
- environment:
1078
- - INSTANA_API_TOKEN=${INSTANA_API_TOKEN}
1079
- - INSTANA_BASE_URL=${INSTANA_BASE_URL}
1080
1070
  restart: unless-stopped
1081
1071
  healthcheck:
1082
1072
  test: ["CMD", "python", "-c", "import requests; requests.get('http://127.0.0.1:8080/health', timeout=5)"]
@@ -1086,15 +1076,35 @@ services:
1086
1076
  start_period: 40s
1087
1077
  ```
1088
1078
 
1079
+ ### Multi-Architecture Support
1080
+
1081
+ The Docker image supports multiple processor architectures, making it portable across different environments:
1082
+
1083
+ #### **Supported Architectures**
1084
+ - ✅ **amd64/x86_64**: Standard Intel/AMD processors (Windows, Linux, most cloud VMs)
1085
+ - ✅ **arm64/aarch64**: Apple Silicon (M1/M2/M3), AWS Graviton, Raspberry Pi 4, etc.
1086
+
1087
+ #### **Benefits of Multi-Architecture Images**
1088
+ - **Cross-Platform Compatibility**: Run the same image on any supported architecture
1089
+ - **Seamless Deployment**: No need to build different images for different environments
1090
+ - **CI/CD Simplification**: Build once, deploy anywhere
1091
+ - **Cloud Flexibility**: Switch between cloud providers and instance types without rebuilding images
1092
+
1093
+ #### **How It Works**
1094
+ 1. The multi-architecture image is a "manifest list" containing images for each architecture
1095
+ 2. When you pull the image, Docker automatically selects the correct architecture for your system
1096
+ 3. The image runs natively on your architecture without emulation, ensuring optimal performance
1097
+
1089
1098
  ### Docker Security Features
1090
1099
 
1091
1100
  #### **Security Best Practices Implemented**
1092
1101
  - ✅ **Non-root user**: Container runs as `mcpuser` (not root)
1093
- - ✅ **No hardcoded secrets**: All credentials passed via environment variables
1102
+ - ✅ **No secrets in container**: Credentials are passed via HTTP headers from clients, not stored in the container
1094
1103
  - ✅ **Minimal dependencies**: Only 20 essential runtime dependencies
1095
1104
  - ✅ **Multi-stage build**: Build tools don't make it to final image
1096
1105
  - ✅ **Health checks**: Built-in container health monitoring
1097
1106
  - ✅ **Optimized base image**: Uses `python:3.11-slim`
1107
+ - ✅ **Multi-architecture support**: Run natively on any supported platform
1098
1108
 
1099
1109
  #### **Image Size Optimization**
1100
1110
  - **Original approach**: 95+ dependencies → ~1-2GB+ image
@@ -1134,11 +1144,12 @@ docker exec -it <container_id> /bin/bash
1134
1144
  ### Production Deployment
1135
1145
 
1136
1146
  #### **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
1147
+ 1. **Run container without credentials** - The container runs in Streamable HTTP mode, so no Instana credentials are needed in the container
1148
+ 2. **Configure clients with credentials** - Pass Instana credentials via HTTP headers from MCP clients (Claude Desktop, GitHub Copilot, etc.)
1149
+ 3. **Set up proper logging** and monitoring
1150
+ 4. **Configure health checks** for container orchestration
1151
+ 5. **Use container orchestration** (Kubernetes, Docker Swarm, etc.)
1152
+ 6. **Implement proper backup** and disaster recovery
1142
1153
 
1143
1154
  #### **Kubernetes Example**
1144
1155
  ```yaml
@@ -1161,14 +1172,6 @@ spec:
1161
1172
  image: mcp-instana:latest
1162
1173
  ports:
1163
1174
  - 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
1175
  livenessProbe:
1173
1176
  httpGet:
1174
1177
  path: /health
@@ -1193,9 +1196,11 @@ spec:
1193
1196
  docker logs <container_id>
1194
1197
 
1195
1198
  # Common issues:
1196
- # 1. Missing environment variables
1197
- # 2. Port already in use
1198
- # 3. Invalid Instana credentials
1199
+ # 1. Port already in use
1200
+ # 2. Invalid container image
1201
+ # 3. Missing dependencies
1202
+
1203
+ # Credentials are passed via HTTP headers from the MCP client
1199
1204
  ```
1200
1205
 
1201
1206
  #### **Connection Issues**