linux-mcp-server 1.2.0__tar.gz → 1.3.0__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 (134) hide show
  1. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.github/workflows/build-publish.yml +20 -1
  2. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.github/workflows/ci.yml +4 -4
  3. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.github/workflows/ci_installation.yaml +2 -2
  4. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.github/workflows/docs.yml +2 -2
  5. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.tekton/pipeline-build-multiarch.yaml +16 -16
  6. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/Containerfile +1 -1
  7. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/PKG-INFO +3 -3
  8. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/clients.md +70 -55
  9. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/install.md +21 -0
  10. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/usage.md +48 -10
  11. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/pyproject.toml +5 -3
  12. linux_mcp_server-1.3.0/scripts/publish_mcp_registry.py +113 -0
  13. linux_mcp_server-1.3.0/server.json +100 -0
  14. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/__main__.py +6 -0
  15. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/commands.py +10 -4
  16. linux_mcp_server-1.3.0/src/linux_mcp_server/config.py +83 -0
  17. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/formatters.py +6 -210
  18. linux_mcp_server-1.2.0/src/linux_mcp_server/utils/types.py → linux_mcp_server-1.3.0/src/linux_mcp_server/models.py +68 -12
  19. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/parsers.py +10 -10
  20. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/server.py +3 -1
  21. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/logs.py +40 -30
  22. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/processes.py +4 -1
  23. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/services.py +14 -2
  24. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/storage.py +86 -88
  25. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/system_info.py +38 -25
  26. linux_mcp_server-1.3.0/src/linux_mcp_server/utils/types.py +8 -0
  27. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/utils/validation.py +2 -2
  28. linux_mcp_server-1.3.0/tests/cli/test_cli.py +48 -0
  29. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/conftest.py +12 -0
  30. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_config.py +22 -44
  31. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_formatters.py +7 -247
  32. linux_mcp_server-1.3.0/tests/test_tool_schemas.py +50 -0
  33. linux_mcp_server-1.3.0/tests/tools/storage/__init__.py +0 -0
  34. linux_mcp_server-1.3.0/tests/tools/storage/conftest.py +53 -0
  35. linux_mcp_server-1.3.0/tests/tools/storage/test_list_block_devices.py +68 -0
  36. linux_mcp_server-1.3.0/tests/tools/storage/test_list_directories.py +132 -0
  37. linux_mcp_server-1.3.0/tests/tools/storage/test_list_files.py +112 -0
  38. linux_mcp_server-1.3.0/tests/tools/storage/test_path_validation.py +15 -0
  39. linux_mcp_server-1.3.0/tests/tools/storage/test_read_file.py +49 -0
  40. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/tools/test_logs.py +29 -55
  41. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/tools/test_processes.py +0 -6
  42. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/tools/test_services.py +8 -9
  43. linux_mcp_server-1.3.0/tests/tools/test_system_info.py +266 -0
  44. linux_mcp_server-1.3.0/tests/utils/__init__.py +0 -0
  45. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/utils/test_validation.py +7 -5
  46. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/uv.lock +407 -395
  47. linux_mcp_server-1.2.0/src/linux_mcp_server/config.py +0 -45
  48. linux_mcp_server-1.2.0/tests/tools/test_storage.py +0 -494
  49. linux_mcp_server-1.2.0/tests/tools/test_system_info.py +0 -112
  50. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.codecov.yml +0 -0
  51. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.coderabbit.yaml +0 -0
  52. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.devcontainer/Containerfile +0 -0
  53. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.devcontainer/devcontainer.json +0 -0
  54. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.github/workflows/functional-tests.yml +0 -0
  55. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.gitignore +0 -0
  56. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.tekton/pull_request.yaml +0 -0
  57. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.tekton/push.yaml +0 -0
  58. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/.tekton/task-get-version.yaml +0 -0
  59. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/AGENTS.md +0 -0
  60. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/LICENSE +0 -0
  61. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/Makefile +0 -0
  62. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/README.md +0 -0
  63. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/audit.md +0 -0
  64. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/commands.md +0 -0
  65. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/config.md +0 -0
  66. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/connection.md +0 -0
  67. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/formatters.md +0 -0
  68. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/index.md +0 -0
  69. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/parsers.md +0 -0
  70. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/server.md +0 -0
  71. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/logs.md +0 -0
  72. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/network.md +0 -0
  73. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/processes.md +0 -0
  74. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/services.md +0 -0
  75. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/storage.md +0 -0
  76. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/api/tools/system_info.md +0 -0
  77. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/architecture.md +0 -0
  78. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/cheatsheet.md +0 -0
  79. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/contributing.md +0 -0
  80. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/debugging.md +0 -0
  81. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/examples/claude_desktop_config.example.json +0 -0
  82. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/examples/example_config.sh +0 -0
  83. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/getting-started.md +0 -0
  84. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/index.md +0 -0
  85. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/docs/troubleshooting.md +0 -0
  86. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/licenses/GPL-3.0.txt +0 -0
  87. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/mkdocs.yml +0 -0
  88. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/renovate.json +0 -0
  89. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/scripts/verify_installation.sh +0 -0
  90. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/__init__.py +0 -0
  91. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/_vendor/__init__.py +0 -0
  92. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/audit.py +0 -0
  93. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/connection/__init__.py +0 -0
  94. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/connection/ssh.py +0 -0
  95. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/logging_config.py +0 -0
  96. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/__init__.py +0 -0
  97. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/tools/network.py +0 -0
  98. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/utils/__init__.py +0 -0
  99. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/utils/decorators.py +0 -0
  100. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/utils/enum.py +0 -0
  101. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/src/linux_mcp_server/utils/format.py +0 -0
  102. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/__init__.py +0 -0
  103. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/_vendor/__init__.py +0 -0
  104. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/_vendor/test_vendor.py +0 -0
  105. {linux_mcp_server-1.2.0/tests/connection → linux_mcp_server-1.3.0/tests/cli}/__init__.py +0 -0
  106. {linux_mcp_server-1.2.0/tests/connection/ssh → linux_mcp_server-1.3.0/tests/connection}/__init__.py +0 -0
  107. {linux_mcp_server-1.2.0/tests/parsers → linux_mcp_server-1.3.0/tests/connection/ssh}/__init__.py +0 -0
  108. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_connection_manager.py +0 -0
  109. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_discover_ssh_key.py +0 -0
  110. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_execute_command.py +0 -0
  111. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_get_bin_path.py +0 -0
  112. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_host_key_verification.py +0 -0
  113. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/connection/ssh/test_timeout.py +0 -0
  114. {linux_mcp_server-1.2.0/tests/tools → linux_mcp_server-1.3.0/tests/parsers}/__init__.py +0 -0
  115. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_cpu_info.py +0 -0
  116. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_free_output.py +0 -0
  117. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_ip_brief.py +0 -0
  118. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_listing.py +0 -0
  119. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_os_release.py +0 -0
  120. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_proc.py +0 -0
  121. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_ps_output.py +0 -0
  122. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_service_count.py +0 -0
  123. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_ss.py +0 -0
  124. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/parsers/test_parse_system_info.py +0 -0
  125. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test__main__.py +0 -0
  126. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_audit.py +0 -0
  127. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_commands.py +0 -0
  128. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_logging_config.py +0 -0
  129. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/test_server.py +0 -0
  130. {linux_mcp_server-1.2.0/tests/utils → linux_mcp_server-1.3.0/tests/tools}/__init__.py +0 -0
  131. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/tools/test_network.py +0 -0
  132. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/utils/test_decorators.py +0 -0
  133. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/utils/test_enum.py +0 -0
  134. {linux_mcp_server-1.2.0 → linux_mcp_server-1.3.0}/tests/utils/test_format.py +0 -0
@@ -42,7 +42,7 @@ jobs:
42
42
  path: dist
43
43
  if-no-files-found: error
44
44
 
45
- publish:
45
+ publish-pypi:
46
46
  name: Publish to PyPI
47
47
  runs-on: ubuntu-latest
48
48
  needs:
@@ -73,3 +73,22 @@ jobs:
73
73
 
74
74
  - name: Publish to PyPI
75
75
  uses: pypa/gh-action-pypi-publish@v1.13.0
76
+
77
+ publish-mcp:
78
+ name: Publish to MCP registry
79
+ runs-on: ubuntu-latest
80
+ needs:
81
+ - publish-pypi
82
+
83
+ environment:
84
+ name: mcp
85
+
86
+ permissions:
87
+ id-token: write
88
+
89
+ steps:
90
+ - name: Checkout
91
+ uses: actions/checkout@v6.0.2
92
+
93
+ - name: Publish to MCP Registry
94
+ run: ./scripts/publish_mcp_registry.py
@@ -44,12 +44,12 @@ jobs:
44
44
  uses: actions/checkout@v6.0.2
45
45
 
46
46
  - name: Install Python
47
- uses: actions/setup-python@v6.1.0
47
+ uses: actions/setup-python@v6.2.0
48
48
  with:
49
49
  python-version-file: pyproject.toml
50
50
 
51
51
  - name: Install uv
52
- uses: astral-sh/setup-uv@v7.2.0
52
+ uses: astral-sh/setup-uv@v7.2.1
53
53
  with:
54
54
  enable-cache: true
55
55
  prune-cache: false
@@ -89,12 +89,12 @@ jobs:
89
89
  uses: actions/checkout@v6.0.2
90
90
 
91
91
  - name: Install Python
92
- uses: actions/setup-python@v6.1.0
92
+ uses: actions/setup-python@v6.2.0
93
93
  with:
94
94
  python-version-file: pyproject.toml
95
95
 
96
96
  - name: Install uv
97
- uses: astral-sh/setup-uv@v7.2.0
97
+ uses: astral-sh/setup-uv@v7.2.1
98
98
  with:
99
99
  enable-cache: true
100
100
  prune-cache: false
@@ -47,12 +47,12 @@ jobs:
47
47
  uses: actions/checkout@v6.0.2
48
48
 
49
49
  - name: Install Python ${{ matrix.python-version }}
50
- uses: actions/setup-python@v6.1.0
50
+ uses: actions/setup-python@v6.2.0
51
51
  with:
52
52
  python-version: ${{ matrix.python-version }}
53
53
 
54
54
  - name: Install uv
55
- uses: astral-sh/setup-uv@v7.2.0
55
+ uses: astral-sh/setup-uv@v7.2.1
56
56
  with:
57
57
  enable-cache: true
58
58
  prune-cache: false
@@ -29,12 +29,12 @@ jobs:
29
29
  uses: actions/checkout@v6.0.2
30
30
 
31
31
  - name: Install Python
32
- uses: actions/setup-python@v6.1.0
32
+ uses: actions/setup-python@v6.2.0
33
33
  with:
34
34
  python-version-file: pyproject.toml
35
35
 
36
36
  - name: Install uv
37
- uses: astral-sh/setup-uv@v7.2.0
37
+ uses: astral-sh/setup-uv@v7.2.1
38
38
  with:
39
39
  enable-cache: true
40
40
  prune-cache: false
@@ -129,7 +129,7 @@ spec:
129
129
  value: init
130
130
 
131
131
  - name: bundle
132
- value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:b349d24cb896573695802d6913d311640b44675ec082b3ad167721946a6a0a71
132
+ value: quay.io/konflux-ci/tekton-catalog/task-init:0.2@sha256:ebf06778aeacbbeb081f9231eafbdfdb8e380ad04e211d7ed80ae9101e37fd82
133
133
 
134
134
  - name: kind
135
135
  value: task
@@ -164,7 +164,7 @@ spec:
164
164
  value: git-clone-oci-ta
165
165
 
166
166
  - name: bundle
167
- value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:56f65a16d3d0485c64ad85af2c1f3e9b0bb4d02d63f2fd0ebb9498d219ca723d
167
+ value: quay.io/konflux-ci/tekton-catalog/task-git-clone-oci-ta:0.1@sha256:306b69e6db435ad4a7cf258b6219d9b998eb37da44f5e9ac882ac86a08109154
168
168
 
169
169
  - name: kind
170
170
  value: task
@@ -203,7 +203,7 @@ spec:
203
203
  value: prefetch-dependencies-oci-ta
204
204
 
205
205
  - name: bundle
206
- value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:36207773434bfad80fc3991d3ccca409d8429dbf5974c4dcd8d54145235b4b7b
206
+ value: quay.io/konflux-ci/tekton-catalog/task-prefetch-dependencies-oci-ta:0.2@sha256:c664a6df6514b59c3ce53570b0994b45af66ecc89ba2a8e41834eae0622addf6
207
207
 
208
208
  - name: kind
209
209
  value: task
@@ -291,7 +291,7 @@ spec:
291
291
  value: buildah-remote-oci-ta
292
292
 
293
293
  - name: bundle
294
- value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.7@sha256:d8b2cd0bd3f8e3fdcafe4aebfee59f3f2fcbca78ef31f9c5dd8ecd781cd02636
294
+ value: quay.io/konflux-ci/tekton-catalog/task-buildah-remote-oci-ta:0.8@sha256:da99fce12bf72da86f6a86a5370d826c16ea8db001d27181dcaf087af9ab60cb
295
295
 
296
296
  - name: kind
297
297
  value: task
@@ -335,7 +335,7 @@ spec:
335
335
  value: build-image-index
336
336
 
337
337
  - name: bundle
338
- value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.2@sha256:985d1efe861b02524a7679ecd855624b3d4e3a2e835b6f8a97ec7d135898ec0b
338
+ value: quay.io/konflux-ci/tekton-catalog/task-build-image-index:0.2@sha256:05d3d8a5ded44c51b074a56a408ddf5d65c56b4c15e110abb1a99e3aff269d49
339
339
 
340
340
  - name: kind
341
341
  value: task
@@ -364,7 +364,7 @@ spec:
364
364
  value: deprecated-image-check
365
365
 
366
366
  - name: bundle
367
- value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:808fe09bb5b8503de569de097ae5dd619a7488110f79e8e215e69862ee3fce6d
367
+ value: quay.io/konflux-ci/tekton-catalog/task-deprecated-image-check:0.5@sha256:e3a55ccdf1091b4a35507f9ee2d1918d8e89a5f96babcb5486b491226da03d6f
368
368
 
369
369
  - name: kind
370
370
  value: task
@@ -393,7 +393,7 @@ spec:
393
393
  value: clair-scan
394
394
 
395
395
  - name: bundle
396
- value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:7c2a32de9021f16f6e8df08a55f539f12e00ea4d96f6fb37f9ea04167032c61f
396
+ value: quay.io/konflux-ci/tekton-catalog/task-clair-scan:0.3@sha256:dadfea7633d82e4303ba73d5e9c7e2bc16834bde0fd7688880453b26452067eb
397
397
 
398
398
  - name: kind
399
399
  value: task
@@ -418,7 +418,7 @@ spec:
418
418
  value: ecosystem-cert-preflight-checks
419
419
 
420
420
  - name: bundle
421
- value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:04f75593558f79a27da2336400bc63d460bf0c5669e3c13f40ee2fb650b1ad1e
421
+ value: quay.io/konflux-ci/tekton-catalog/task-ecosystem-cert-preflight-checks:0.2@sha256:0c3f9d4707bf742a5209f2e2186211433c83d5fcc538c728e4c7df178b5eafb7
422
422
 
423
423
  - name: kind
424
424
  value: task
@@ -455,7 +455,7 @@ spec:
455
455
  value: sast-snyk-check-oci-ta
456
456
 
457
457
  - name: bundle
458
- value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:0eca130f289a1a1069a1b92943479f79aa7324e4e68d6396fd777ccd97058f50
458
+ value: quay.io/konflux-ci/tekton-catalog/task-sast-snyk-check-oci-ta:0.4@sha256:a70272ae12f6d7f0da2902158e1bcee756877aa8f71fd1a22ef9afd8b177fb41
459
459
 
460
460
  - name: kind
461
461
  value: task
@@ -484,7 +484,7 @@ spec:
484
484
  value: clamav-scan
485
485
 
486
486
  - name: bundle
487
- value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:f3d2d179cddcc07d0228d9f52959a233037a3afa2619d0a8b2effbb467db80c3
487
+ value: quay.io/konflux-ci/tekton-catalog/task-clamav-scan:0.3@sha256:bcf08c20d35988bce353d36b915070a9ab7497e436e8c9d5db27ae9274e3c383
488
488
 
489
489
  - name: kind
490
490
  value: task
@@ -506,7 +506,7 @@ spec:
506
506
  value: coverity-availability-check
507
507
 
508
508
  - name: bundle
509
- value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:36400873d3031df128c55aa71ee11d322c3e55fd8f13dc5779098fbc117c0aa3
509
+ value: quay.io/konflux-ci/tekton-catalog/task-coverity-availability-check:0.2@sha256:267d5bc069a0323f41e24732ddfd1057e5c639e853d1e620c67505fab78f1301
510
510
 
511
511
  - name: kind
512
512
  value: task
@@ -570,7 +570,7 @@ spec:
570
570
  value: sast-coverity-check-oci-ta
571
571
 
572
572
  - name: bundle
573
- value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:78f5244a8cfd28c890ed62db7e4ff1fc97ff39876d37fb19f1b0c2c286a4002c
573
+ value: quay.io/konflux-ci/tekton-catalog/task-sast-coverity-check-oci-ta:0.3@sha256:9d0bc704bca6b6faad37b2ce8106b96e0cef35e1f647d037a878bf416589de9d
574
574
 
575
575
  - name: kind
576
576
  value: task
@@ -610,7 +610,7 @@ spec:
610
610
  value: sast-shell-check-oci-ta
611
611
 
612
612
  - name: bundle
613
- value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:d44336d7bcbd1f7cedee639357a493bd1f661e2859e49e11a34644bdf6819c4e
613
+ value: quay.io/konflux-ci/tekton-catalog/task-sast-shell-check-oci-ta:0.1@sha256:e7a51575f9188a1461d4520da25aaa4efdd3b896c97dc750941fa22840e55c13
614
614
 
615
615
  - name: kind
616
616
  value: task
@@ -645,7 +645,7 @@ spec:
645
645
  value: sast-unicode-check-oci-ta
646
646
 
647
647
  - name: bundle
648
- value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.3@sha256:e5a8d3e8e7be7246a1460385b95c084ea6e8fe7520d40fe4389deb90f1bf5176
648
+ value: quay.io/konflux-ci/tekton-catalog/task-sast-unicode-check-oci-ta:0.4@sha256:1818a5b3e4fa86c838ae71226a157241967d1f19c5ed377e4b2fddad7a3ceefe
649
649
 
650
650
  - name: kind
651
651
  value: task
@@ -679,7 +679,7 @@ spec:
679
679
  value: apply-tags
680
680
 
681
681
  - name: bundle
682
- value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.2@sha256:c89cd10b2a3f4c43789c5f06ef2b86f528b28f156c20af5e751fa8c0facd457d
682
+ value: quay.io/konflux-ci/tekton-catalog/task-apply-tags:0.3@sha256:510b6d2a3b188adeb716e49566b57d611ab36bd69a2794b5ddfc11dbf014c2ca
683
683
 
684
684
  - name: kind
685
685
  value: task
@@ -734,7 +734,7 @@ spec:
734
734
  value: rpms-signature-scan
735
735
 
736
736
  - name: bundle
737
- value: quay.io/konflux-ci/tekton-catalog/task-rpms-signature-scan:0.2@sha256:0b10508c82ccb0f5a06a66ce7af56e9bfd40651ddefdf0f499988e897771ee28
737
+ value: quay.io/konflux-ci/tekton-catalog/task-rpms-signature-scan:0.2@sha256:2f3015ac7a642ea7f104d2194a8cb45921570f9539c6604ddcb5f62796f22a53
738
738
 
739
739
  - name: kind
740
740
  value: task
@@ -1,4 +1,4 @@
1
- FROM registry.access.redhat.com/ubi10-minimal:10.1-1766033715 as base
1
+ FROM registry.access.redhat.com/ubi10-minimal:10.1-1769521234 as base
2
2
 
3
3
  FROM base as build
4
4
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: linux-mcp-server
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: MCP server for read-only Linux system administration, diagnostics, and troubleshooting
5
5
  Project-URL: Source code, https://github.com/rhel-lightspeed/linux-mcp-server
6
6
  Project-URL: Bug Tracker, https://github.com/rhel-lightspeed/linux-mcp-server/issues
@@ -26,11 +26,11 @@ Classifier: Topic :: System :: Systems Administration
26
26
  Classifier: Topic :: Utilities
27
27
  Requires-Python: >=3.10
28
28
  Requires-Dist: asyncssh[bcrypt]>=2.22.0
29
- Requires-Dist: fastmcp<3,>=2
29
+ Requires-Dist: fastmcp<3,>=2.14.4
30
30
  Requires-Dist: pydantic-settings>=2.12.0
31
31
  Requires-Dist: pydantic>=2.12.5
32
32
  Provides-Extra: gssapi
33
- Requires-Dist: gssapi>=1.2.0; extra == 'gssapi'
33
+ Requires-Dist: gssapi>=1.11.1; extra == 'gssapi'
34
34
  Description-Content-Type: text/markdown
35
35
 
36
36
  <!-- mcp-name: io.github.rhel-lightspeed/linux-mcp-server -->
@@ -43,7 +43,7 @@ Edit `~/.claude.json`:
43
43
  }
44
44
  ```
45
45
 
46
- === "Container (Podman)"
46
+ === "Container (stdio transport)"
47
47
 
48
48
  ```json
49
49
  {
@@ -104,23 +104,7 @@ The value for `command` will vary depending on how `linux-mcp-server` was instal
104
104
  }
105
105
  ```
106
106
 
107
- === "uv"
108
-
109
- ```json
110
- {
111
- "mcpServers": {
112
- "linux-diagnostics": {
113
- "command": "/home/YOUR_USER/.local/bin/linux-mcp-server",
114
- "args": [],
115
- "env": {
116
- "LINUX_MCP_ALLOWED_LOG_PATHS": "/var/log/messages,/var/log/lastlog"
117
- }
118
- }
119
- }
120
- }
121
- ```
122
-
123
- === "Container (Podman)"
107
+ === "Container (stdio transport)"
124
108
 
125
109
  ```json
126
110
  {
@@ -180,7 +164,7 @@ Edit `~/.codex/config.toml`:
180
164
  LINUX_MCP_USER = "your-ssh-username"
181
165
  ```
182
166
 
183
- === "Container (Podman)"
167
+ === "Container (stdio transport)"
184
168
 
185
169
  ```toml
186
170
  [mcp_servers.linux-mcp-server]
@@ -230,7 +214,7 @@ Edit `~/.cursor/mcp.json`:
230
214
  }
231
215
  ```
232
216
 
233
- === "Container (Podman)"
217
+ === "Container (stdio transport)"
234
218
 
235
219
  ```json
236
220
  {
@@ -273,11 +257,9 @@ Edit `~/.gemini/settings.json`:
273
257
 
274
258
  ```json
275
259
  {
276
- // your other settings
277
- ,
278
260
  "mcpServers": {
279
261
  "linux-mcp-server": {
280
- "command": "/home/$USER/.local/bin/linux-mcp-server",
262
+ "command": "/home/YOUR_USER/.local/bin/linux-mcp-server",
281
263
  "args": [],
282
264
  "env": {
283
265
  "LINUX_MCP_USER": "your-ssh-username"
@@ -287,7 +269,10 @@ Edit `~/.gemini/settings.json`:
287
269
  }
288
270
  ```
289
271
 
290
- === "Container (Podman)"
272
+ !!! note "Merging with Existing Settings"
273
+ If you have other settings in your `settings.json`, add the `mcpServers` object alongside them.
274
+
275
+ === "Container (stdio transport)"
291
276
 
292
277
  ```json
293
278
  {
@@ -372,7 +357,7 @@ If you prefer editing config files directly, add to `~/.config/goose/config.yaml
372
357
  args: []
373
358
  ```
374
359
 
375
- === "Container (Podman)"
360
+ === "Container (stdio transport)"
376
361
 
377
362
  ```yaml
378
363
  extensions:
@@ -407,6 +392,26 @@ If you prefer editing config files directly, add to `~/.config/goose/config.yaml
407
392
  bundled: null
408
393
  available_tools: []
409
394
  ```
395
+ === "HTTP transport"
396
+
397
+ !!! note Start the thing
398
+ `linux-mcp-server` must be started separately when using HTTP transport.
399
+
400
+ ```yaml
401
+ extensions:
402
+ linux-tools-http:
403
+ enabled: true
404
+ type: streamable_http
405
+ name: linux-tools-http
406
+ description: Linux Tools HTTP
407
+ uri: http://localhost:8000/mcp
408
+ envs: {}
409
+ env_keys: []
410
+ headers: {}
411
+ timeout: 30
412
+ bundled: null
413
+ available_tools: []
414
+ ```
410
415
 
411
416
  !!! warning "Replace Paths"
412
417
  Replace `YOUR_USER` with your actual username and adjust paths as needed.
@@ -439,7 +444,7 @@ Edit `~/.config/opencode/opencode.json`:
439
444
  }
440
445
  ```
441
446
 
442
- === "Container (Podman)"
447
+ === "Container (stdio transport)"
443
448
 
444
449
  ```json
445
450
  {
@@ -483,41 +488,39 @@ Add to your VS Code `mcp.json`:
483
488
  === "pip/uv (Recommended)"
484
489
 
485
490
  ```json
486
- {
487
- "servers": {
488
- "linux-mcp-server": {
489
- "command": "/home/YOUR_USER/.local/bin/linux-mcp-server",
490
- "args": [],
491
- "env": {
492
- "LINUX_MCP_USER": "your-ssh-username"
491
+ {
492
+ "servers": {
493
+ "linux-mcp-server": {
494
+ "command": "/home/YOUR_USER/.local/bin/linux-mcp-server",
495
+ "args": [],
496
+ "env": {
497
+ "LINUX_MCP_USER": "your-ssh-username"
498
+ }
499
+ }
493
500
  }
494
501
  }
495
- }
496
- }
497
502
  ```
498
503
 
499
- === "Container (Podman)"
504
+ === "Container (stdio transport)"
500
505
 
501
506
  ```json
502
507
  {
503
- "mcp": {
504
- "servers": {
505
- "linux-mcp-server": {
506
- "command": "podman",
507
- "args": [
508
- "run", "--rm", "--interactive",
509
- "--userns", "keep-id:uid=1001,gid=0",
510
- "-e", "LINUX_MCP_KEY_PASSPHRASE",
511
- "-e", "LINUX_MCP_USER",
512
- "-v", "/home/YOUR_USER/.ssh/id_ed25519:/var/lib/mcp/.ssh/id_ed25519:ro,Z",
513
- "-v", "/home/YOUR_USER/.ssh/config:/var/lib/mcp/.ssh/config:ro,Z",
514
- "-v", "/home/YOUR_USER/.local/share/linux-mcp-server/logs:/var/lib/mcp/.local/share/linux-mcp-server/logs:rw,Z",
515
- "quay.io/redhat-services-prod/rhel-lightspeed-tenant/linux-mcp-server:latest"
516
- ],
517
- "env": {
518
- "LINUX_MCP_KEY_PASSPHRASE": "<secret>",
519
- "LINUX_MCP_USER": "YOUR_USER"
520
- }
508
+ "servers": {
509
+ "linux-mcp-server": {
510
+ "command": "podman",
511
+ "args": [
512
+ "run", "--rm", "--interactive",
513
+ "--userns", "keep-id:uid=1001,gid=0",
514
+ "-e", "LINUX_MCP_KEY_PASSPHRASE",
515
+ "-e", "LINUX_MCP_USER",
516
+ "-v", "/home/YOUR_USER/.ssh/id_ed25519:/var/lib/mcp/.ssh/id_ed25519:ro,Z",
517
+ "-v", "/home/YOUR_USER/.ssh/config:/var/lib/mcp/.ssh/config:ro,Z",
518
+ "-v", "/home/YOUR_USER/.local/share/linux-mcp-server/logs:/var/lib/mcp/.local/share/linux-mcp-server/logs:rw,Z",
519
+ "quay.io/redhat-services-prod/rhel-lightspeed-tenant/linux-mcp-server:latest"
520
+ ],
521
+ "env": {
522
+ "LINUX_MCP_KEY_PASSPHRASE": "<secret>",
523
+ "LINUX_MCP_USER": "YOUR_USER"
521
524
  }
522
525
  }
523
526
  }
@@ -556,7 +559,7 @@ Edit `~/.codeium/windsurf/mcp_config.json`:
556
559
  }
557
560
  ```
558
561
 
559
- === "Container (Podman)"
562
+ === "Container (stdio transport)"
560
563
 
561
564
  ```json
562
565
  {
@@ -591,6 +594,18 @@ Edit `~/.codeium/windsurf/mcp_config.json`:
591
594
 
592
595
  Configure these environment variables in the `env` section of your client configuration.
593
596
 
597
+ ### Transport Settings
598
+
599
+ | Variable | Default | Description |
600
+ |----------|---------|-------------|
601
+ | `LINUX_MCP_TRANSPORT` | `stdio` | Transport type: `stdio`, `http`, or `streamable-http` |
602
+ | `LINUX_MCP_HOST` | `127.0.0.1` | Host address for HTTP transport |
603
+ | `LINUX_MCP_PORT` | 8000 | Port number for HTTP transport |
604
+ | `LINUX_MCP_PATH` | /mcp | Path for HTTP transport |
605
+
606
+ !!! note "When to use HTTP transports"
607
+ Some clients, like Claude Desktop, require `stdio`.
608
+
594
609
  ### SSH Connection Settings
595
610
 
596
611
  | Variable | Description | Example |
@@ -89,6 +89,24 @@ A container runtime such as [Podman](https://podman-desktop.io) is required.
89
89
  quay.io/redhat-services-prod/rhel-lightspeed-tenant/linux-mcp-server:latest
90
90
  ```
91
91
 
92
+ See [client configuration](clients.md) for examples of how to run the container using stdio transport.
93
+
94
+ When using an HTTP transport, `http` or `streamable-http`, the container must be started before launching the LLM client.
95
+
96
+ ```bash
97
+ podman run --rm --interactive \
98
+ --userns "keep-id:uid=1001,gid=0"
99
+ --port 8000:8000 \
100
+ -e LINUX_MCP_KEY_PASSPHRASE # Only needed if the SSH key is protected by a passphrase
101
+ -e LINUX_MCP_TRANSPORT=streamable-http \
102
+ -e LINUX_MCP_HOST=0.0.0.0 \ # bind to all interfaces inside the container
103
+ -v /home/YOUR_USER/.ssh/id_ed25519:/var/lib/mcp/.ssh/id_ed25519:ro \
104
+ -v /home/YOUR_USER/.ssh/config:/var/lib/mcp/.ssh/config:ro,Z \
105
+ -v /home/YOUR_USER/.local/share/linux-mcp-server/logs:/var/lib/mcp/.local/share/linux-mcp-server/logs:rw \
106
+ quay.io/redhat-services-prod/rhel-lightspeed-tenant/linux-mcp-server:latest
107
+
108
+ ```
109
+
92
110
  #### Container Setup for SSH Keys
93
111
 
94
112
  The container needs access to your SSH keys for remote connections. Set up the required directories and permissions:
@@ -132,6 +150,9 @@ sudo chown -R 1001:1001 ~/.local/share/linux-mcp-server/
132
150
  - Ensure files are owned by UID 1001 on the host
133
151
  - Create directories beforehand (Docker won't auto-create them)
134
152
 
153
+
154
+ Once the SSH keys are configured, configure your [LLM client](clients.md) to run the container image. It is not necessary to run the container manually since the LLM client will do that.
155
+
135
156
  ---
136
157
 
137
158
  ## SSH Configuration
@@ -16,16 +16,54 @@ pip install linux-mcp-server
16
16
 
17
17
  ### Running the Server
18
18
 
19
- 1. **Configure environment variables (optional but recommended):**
20
- ```bash
21
- export LINUX_MCP_ALLOWED_LOG_PATHS="/var/log/messages,/var/log/secure,/var/log/audit/audit.log"
22
- export LINUX_MCP_LOG_LEVEL="INFO"
23
- ```
24
-
25
- 2. **Run the server:**
26
- ```bash
27
- linux-mcp-server
28
- ```
19
+ ```bash
20
+ linux-mcp-server
21
+ ```
22
+
23
+ ### Command Line Options
24
+
25
+ To see available options, run `linux-mcp-server --help`.
26
+
27
+ Options may be set using environment variables or command line options. Environment variables require a `LINUX_MCP_` prefix. For example `LINUX_MCP_LOG_LEVEL` is the same as `--log-level`.
28
+
29
+ !!! note "Command Line vs Environment Variables"
30
+ Command line options take precedence over environment variables. For MCP client configurations (Claude Desktop, Cursor, etc.), you typically use environment variables in the config file rather than command line arguments but either will.
31
+
32
+
33
+ #### Available Options
34
+
35
+ | Option | Type | Default | Description |
36
+ |--------|------|---------|-------------|
37
+ | `-h, --help` | - | - | Show help message and exit |
38
+ | `--version` | - | - | Display version and exit |
39
+ | `--user` | string | (empty) | Default username for SSH connections |
40
+ | `--transport` | string | stdio | Transport type: `stdio`, `http`, or `streamable_http` |
41
+ | `--host` | string | `127.0.0.1` | Host address for HTTP transport |
42
+ | `--port` | integer | 8000 | Port number for HTTP transport |
43
+ | `--path` | string | /mcp | Path for HTTP transport |
44
+ | `--log-dir` | path | `~/.local/share/linux-mcp-server/logs` | Directory for server logs |
45
+ | `--log-level` | string | `INFO` | Log verbosity level |
46
+ | `--log-retention-days` | integer | 10 | Days to retain log files |
47
+ | `--allowed-log-paths` | string | null | Comma-separated list of allowed log file paths |
48
+ | `--ssh-key-path` | path | null | Path to SSH private key file |
49
+ | `--key-passphrase` | string | (empty) | Passphrase for encrypted SSH key |
50
+ | `--search-for-ssh-key` | bool | False | Auto-discover SSH keys in `~/.ssh` |
51
+ | `--verify-host-keys` | bool | False | Verify remote host identity via known_hosts |
52
+ | `--known-hosts-path` | path | null | Path to known_hosts file |
53
+ | `--command-timeout` | integer | 30 | SSH command timeout in seconds |
54
+
55
+ #### Examples
56
+
57
+
58
+ **Specify SSH settings:**
59
+ ```bash
60
+ linux-mcp-server --user admin --ssh-key-path ~/.ssh/id_rsa --verify-host-keys
61
+ ```
62
+
63
+ **Configure log access:**
64
+ ```bash
65
+ linux-mcp-server --allowed-log-paths "/var/log/messages,/var/log/secure,/var/log/audit/audit.log"
66
+ ```
29
67
 
30
68
  ### Using with AI Agents
31
69
 
@@ -12,7 +12,7 @@ readme = "README.md"
12
12
  requires-python = ">=3.10"
13
13
  dependencies = [
14
14
  "asyncssh[bcrypt] >= 2.22.0",
15
- "fastmcp >=2, <3",
15
+ "fastmcp >=2.14.4, <3",
16
16
  "pydantic-settings >= 2.12.0",
17
17
  "pydantic >= 2.12.5",
18
18
  ]
@@ -38,7 +38,7 @@ classifiers = [
38
38
  ]
39
39
 
40
40
  [project.optional-dependencies]
41
- gssapi = ["gssapi >= 1.2.0"]
41
+ gssapi = ["gssapi >=1.11.1"]
42
42
 
43
43
  [project.urls]
44
44
  "Source code" = "https://github.com/rhel-lightspeed/linux-mcp-server"
@@ -72,7 +72,7 @@ test = [
72
72
  docs = [
73
73
  "mkdocs>=1.6.1",
74
74
  "mkdocs-material>=9.7.1",
75
- "mkdocstrings[python]>=1.0.0",
75
+ "mkdocstrings[python]>=1.0.2",
76
76
  ]
77
77
 
78
78
  [tool.hatch.build.targets.wheel]
@@ -177,6 +177,8 @@ ignore = [
177
177
  "E501", # Ignore line length (similar to flake8's max-line-length)
178
178
  ]
179
179
 
180
+ [tool.ruff.lint.per-file-ignores]
181
+ "scripts/*" = ["T201"]
180
182
 
181
183
  [tool.ruff.lint.isort]
182
184
  case-sensitive = false