container-manager-mcp 0.0.11__py3-none-any.whl → 1.0.0__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.
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # coding: utf-8
3
3
 
4
- import getopt
4
+ import argparse
5
5
  import os
6
6
  import sys
7
7
  import logging
@@ -41,6 +41,7 @@ def to_boolean(string):
41
41
 
42
42
  environment_silent = os.environ.get("SILENT", False)
43
43
  environment_log_file = os.environ.get("LOG_FILE", None)
44
+ environment_container_manager_type = os.environ.get("CONTAINER_MANAGER_TYPE", None)
44
45
 
45
46
  if environment_silent:
46
47
  environment_silent = to_boolean(environment_silent)
@@ -59,8 +60,9 @@ if environment_silent:
59
60
  tags={"container_management"},
60
61
  )
61
62
  async def get_version(
62
- manager_type: str = Field(
63
- description="Container manager: docker, podman", default="docker"
63
+ manager_type: Optional[str] = Field(
64
+ description="Container manager: docker, podman (default: auto-detect)",
65
+ default=environment_container_manager_type,
64
66
  ),
65
67
  silent: Optional[bool] = Field(
66
68
  description="Suppress output", default=environment_silent
@@ -95,8 +97,9 @@ async def get_version(
95
97
  tags={"container_management"},
96
98
  )
97
99
  async def get_info(
98
- manager_type: str = Field(
99
- description="Container manager: docker, podman", default="docker"
100
+ manager_type: Optional[str] = Field(
101
+ description="Container manager: docker, podman (default: auto-detect)",
102
+ default=environment_container_manager_type,
100
103
  ),
101
104
  silent: Optional[bool] = Field(
102
105
  description="Suppress output", default=environment_silent
@@ -131,8 +134,9 @@ async def get_info(
131
134
  tags={"container_management"},
132
135
  )
133
136
  async def list_images(
134
- manager_type: str = Field(
135
- description="Container manager: docker, podman", default="docker"
137
+ manager_type: Optional[str] = Field(
138
+ description="Container manager: docker, podman (default: auto-detect)",
139
+ default=environment_container_manager_type,
136
140
  ),
137
141
  silent: Optional[bool] = Field(
138
142
  description="Suppress output", default=environment_silent
@@ -172,8 +176,9 @@ async def pull_image(
172
176
  platform: Optional[str] = Field(
173
177
  description="Platform (e.g., linux/amd64)", default=None
174
178
  ),
175
- manager_type: str = Field(
176
- description="Container manager: docker, podman", default="docker"
179
+ manager_type: Optional[str] = Field(
180
+ description="Container manager: docker, podman (default: auto-detect)",
181
+ default=environment_container_manager_type,
177
182
  ),
178
183
  silent: Optional[bool] = Field(
179
184
  description="Suppress output", default=environment_silent
@@ -210,8 +215,9 @@ async def pull_image(
210
215
  async def remove_image(
211
216
  image: str = Field(description="Image name or ID to remove"),
212
217
  force: bool = Field(description="Force removal", default=False),
213
- manager_type: str = Field(
214
- description="Container manager: docker, podman", default="docker"
218
+ manager_type: Optional[str] = Field(
219
+ description="Container manager: docker, podman (default: auto-detect)",
220
+ default=environment_container_manager_type,
215
221
  ),
216
222
  silent: Optional[bool] = Field(
217
223
  description="Suppress output", default=environment_silent
@@ -249,8 +255,9 @@ async def list_containers(
249
255
  all: bool = Field(
250
256
  description="Show all containers (default running only)", default=False
251
257
  ),
252
- manager_type: str = Field(
253
- description="Container manager: docker, podman", default="docker"
258
+ manager_type: Optional[str] = Field(
259
+ description="Container manager: docker, podman (default: auto-detect)",
260
+ default=environment_container_manager_type,
254
261
  ),
255
262
  silent: Optional[bool] = Field(
256
263
  description="Suppress output", default=environment_silent
@@ -301,8 +308,9 @@ async def run_container(
301
308
  environment: Optional[Dict[str, str]] = Field(
302
309
  description="Environment variables", default=None
303
310
  ),
304
- manager_type: str = Field(
305
- description="Container manager: docker, podman", default="docker"
311
+ manager_type: Optional[str] = Field(
312
+ description="Container manager: docker, podman (default: auto-detect)",
313
+ default=environment_container_manager_type,
306
314
  ),
307
315
  silent: Optional[bool] = Field(
308
316
  description="Suppress output", default=environment_silent
@@ -341,8 +349,9 @@ async def run_container(
341
349
  async def stop_container(
342
350
  container_id: str = Field(description="Container ID or name"),
343
351
  timeout: int = Field(description="Timeout in seconds", default=10),
344
- manager_type: str = Field(
345
- description="Container manager: docker, podman", default="docker"
352
+ manager_type: Optional[str] = Field(
353
+ description="Container manager: docker, podman (default: auto-detect)",
354
+ default=environment_container_manager_type,
346
355
  ),
347
356
  silent: Optional[bool] = Field(
348
357
  description="Suppress output", default=environment_silent
@@ -379,8 +388,9 @@ async def stop_container(
379
388
  async def remove_container(
380
389
  container_id: str = Field(description="Container ID or name"),
381
390
  force: bool = Field(description="Force removal", default=False),
382
- manager_type: str = Field(
383
- description="Container manager: docker, podman", default="docker"
391
+ manager_type: Optional[str] = Field(
392
+ description="Container manager: docker, podman (default: auto-detect)",
393
+ default=environment_container_manager_type,
384
394
  ),
385
395
  silent: Optional[bool] = Field(
386
396
  description="Suppress output", default=environment_silent
@@ -419,8 +429,9 @@ async def get_container_logs(
419
429
  tail: str = Field(
420
430
  description="Number of lines to show from the end (or 'all')", default="all"
421
431
  ),
422
- manager_type: str = Field(
423
- description="Container manager: docker, podman", default="docker"
432
+ manager_type: Optional[str] = Field(
433
+ description="Container manager: docker, podman (default: auto-detect)",
434
+ default=environment_container_manager_type,
424
435
  ),
425
436
  silent: Optional[bool] = Field(
426
437
  description="Suppress output", default=environment_silent
@@ -458,8 +469,9 @@ async def exec_in_container(
458
469
  container_id: str = Field(description="Container ID or name"),
459
470
  command: List[str] = Field(description="Command to execute"),
460
471
  detach: bool = Field(description="Detach execution", default=False),
461
- manager_type: str = Field(
462
- description="Container manager: docker, podman", default="docker"
472
+ manager_type: Optional[str] = Field(
473
+ description="Container manager: docker, podman (default: auto-detect)",
474
+ default=environment_container_manager_type,
463
475
  ),
464
476
  silent: Optional[bool] = Field(
465
477
  description="Suppress output", default=environment_silent
@@ -494,8 +506,9 @@ async def exec_in_container(
494
506
  tags={"container_management"},
495
507
  )
496
508
  async def list_volumes(
497
- manager_type: str = Field(
498
- description="Container manager: docker, podman", default="docker"
509
+ manager_type: Optional[str] = Field(
510
+ description="Container manager: docker, podman (default: auto-detect)",
511
+ default=environment_container_manager_type,
499
512
  ),
500
513
  silent: Optional[bool] = Field(
501
514
  description="Suppress output", default=environment_silent
@@ -531,8 +544,9 @@ async def list_volumes(
531
544
  )
532
545
  async def create_volume(
533
546
  name: str = Field(description="Volume name"),
534
- manager_type: str = Field(
535
- description="Container manager: docker, podman", default="docker"
547
+ manager_type: Optional[str] = Field(
548
+ description="Container manager: docker, podman (default: auto-detect)",
549
+ default=environment_container_manager_type,
536
550
  ),
537
551
  silent: Optional[bool] = Field(
538
552
  description="Suppress output", default=environment_silent
@@ -569,8 +583,9 @@ async def create_volume(
569
583
  async def remove_volume(
570
584
  name: str = Field(description="Volume name"),
571
585
  force: bool = Field(description="Force removal", default=False),
572
- manager_type: str = Field(
573
- description="Container manager: docker, podman", default="docker"
586
+ manager_type: Optional[str] = Field(
587
+ description="Container manager: docker, podman (default: auto-detect)",
588
+ default=environment_container_manager_type,
574
589
  ),
575
590
  silent: Optional[bool] = Field(
576
591
  description="Suppress output", default=environment_silent
@@ -605,8 +620,9 @@ async def remove_volume(
605
620
  tags={"container_management"},
606
621
  )
607
622
  async def list_networks(
608
- manager_type: str = Field(
609
- description="Container manager: docker, podman", default="docker"
623
+ manager_type: Optional[str] = Field(
624
+ description="Container manager: docker, podman (default: auto-detect)",
625
+ default=environment_container_manager_type,
610
626
  ),
611
627
  silent: Optional[bool] = Field(
612
628
  description="Suppress output", default=environment_silent
@@ -643,8 +659,9 @@ async def list_networks(
643
659
  async def create_network(
644
660
  name: str = Field(description="Network name"),
645
661
  driver: str = Field(description="Network driver (e.g., bridge)", default="bridge"),
646
- manager_type: str = Field(
647
- description="Container manager: docker, podman", default="docker"
662
+ manager_type: Optional[str] = Field(
663
+ description="Container manager: docker, podman (default: auto-detect)",
664
+ default=environment_container_manager_type,
648
665
  ),
649
666
  silent: Optional[bool] = Field(
650
667
  description="Suppress output", default=environment_silent
@@ -680,8 +697,9 @@ async def create_network(
680
697
  )
681
698
  async def remove_network(
682
699
  network_id: str = Field(description="Network ID or name"),
683
- manager_type: str = Field(
684
- description="Container manager: docker, podman", default="docker"
700
+ manager_type: Optional[str] = Field(
701
+ description="Container manager: docker, podman (default: auto-detect)",
702
+ default=environment_container_manager_type,
685
703
  ),
686
704
  silent: Optional[bool] = Field(
687
705
  description="Suppress output", default=environment_silent
@@ -722,7 +740,10 @@ async def init_swarm(
722
740
  advertise_addr: Optional[str] = Field(
723
741
  description="Advertise address", default=None
724
742
  ),
725
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
743
+ manager_type: Optional[str] = Field(
744
+ description="Container manager: must be docker for swarm (default: auto-detect)",
745
+ default=environment_container_manager_type,
746
+ ),
726
747
  silent: Optional[bool] = Field(
727
748
  description="Suppress output", default=environment_silent
728
749
  ),
@@ -733,7 +754,7 @@ async def init_swarm(
733
754
  description="MCP context for progress reporting", default=None
734
755
  ),
735
756
  ) -> Dict:
736
- if manager_type != "docker":
757
+ if manager_type and manager_type != "docker":
737
758
  raise ValueError("Swarm operations are only supported on Docker")
738
759
  logger = logging.getLogger("ContainerManager")
739
760
  logger.debug(
@@ -759,7 +780,10 @@ async def init_swarm(
759
780
  )
760
781
  async def leave_swarm(
761
782
  force: bool = Field(description="Force leave", default=False),
762
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
783
+ manager_type: Optional[str] = Field(
784
+ description="Container manager: must be docker for swarm (default: auto-detect)",
785
+ default=environment_container_manager_type,
786
+ ),
763
787
  silent: Optional[bool] = Field(
764
788
  description="Suppress output", default=environment_silent
765
789
  ),
@@ -770,7 +794,7 @@ async def leave_swarm(
770
794
  description="MCP context for progress reporting", default=None
771
795
  ),
772
796
  ) -> Dict:
773
- if manager_type != "docker":
797
+ if manager_type and manager_type != "docker":
774
798
  raise ValueError("Swarm operations are only supported on Docker")
775
799
  logger = logging.getLogger("ContainerManager")
776
800
  logger.debug(
@@ -795,7 +819,10 @@ async def leave_swarm(
795
819
  tags={"container_management", "swarm"},
796
820
  )
797
821
  async def list_nodes(
798
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
822
+ manager_type: Optional[str] = Field(
823
+ description="Container manager: must be docker for swarm (default: auto-detect)",
824
+ default=environment_container_manager_type,
825
+ ),
799
826
  silent: Optional[bool] = Field(
800
827
  description="Suppress output", default=environment_silent
801
828
  ),
@@ -806,7 +833,7 @@ async def list_nodes(
806
833
  description="MCP context for progress reporting", default=None
807
834
  ),
808
835
  ) -> List[Dict]:
809
- if manager_type != "docker":
836
+ if manager_type and manager_type != "docker":
810
837
  raise ValueError("Swarm operations are only supported on Docker")
811
838
  logger = logging.getLogger("ContainerManager")
812
839
  logger.debug(
@@ -831,7 +858,10 @@ async def list_nodes(
831
858
  tags={"container_management", "swarm"},
832
859
  )
833
860
  async def list_services(
834
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
861
+ manager_type: Optional[str] = Field(
862
+ description="Container manager: must be docker for swarm (default: auto-detect)",
863
+ default=environment_container_manager_type,
864
+ ),
835
865
  silent: Optional[bool] = Field(
836
866
  description="Suppress output", default=environment_silent
837
867
  ),
@@ -842,7 +872,7 @@ async def list_services(
842
872
  description="MCP context for progress reporting", default=None
843
873
  ),
844
874
  ) -> List[Dict]:
845
- if manager_type != "docker":
875
+ if manager_type and manager_type != "docker":
846
876
  raise ValueError("Swarm operations are only supported on Docker")
847
877
  logger = logging.getLogger("ContainerManager")
848
878
  logger.debug(
@@ -876,7 +906,10 @@ async def create_service(
876
906
  mounts: Optional[List[str]] = Field(
877
907
  description="Mounts [source:target:mode]", default=None
878
908
  ),
879
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
909
+ manager_type: Optional[str] = Field(
910
+ description="Container manager: must be docker for swarm (default: auto-detect)",
911
+ default=environment_container_manager_type,
912
+ ),
880
913
  silent: Optional[bool] = Field(
881
914
  description="Suppress output", default=environment_silent
882
915
  ),
@@ -887,7 +920,7 @@ async def create_service(
887
920
  description="MCP context for progress reporting", default=None
888
921
  ),
889
922
  ) -> Dict:
890
- if manager_type != "docker":
923
+ if manager_type and manager_type != "docker":
891
924
  raise ValueError("Swarm operations are only supported on Docker")
892
925
  logger = logging.getLogger("ContainerManager")
893
926
  logger.debug(
@@ -913,7 +946,10 @@ async def create_service(
913
946
  )
914
947
  async def remove_service(
915
948
  service_id: str = Field(description="Service ID or name"),
916
- manager_type: str = Field(description="Must be docker for swarm", default="docker"),
949
+ manager_type: Optional[str] = Field(
950
+ description="Container manager: must be docker for swarm (default: auto-detect)",
951
+ default=environment_container_manager_type,
952
+ ),
917
953
  silent: Optional[bool] = Field(
918
954
  description="Suppress output", default=environment_silent
919
955
  ),
@@ -924,7 +960,7 @@ async def remove_service(
924
960
  description="MCP context for progress reporting", default=None
925
961
  ),
926
962
  ) -> Dict:
927
- if manager_type != "docker":
963
+ if manager_type and manager_type != "docker":
928
964
  raise ValueError("Swarm operations are only supported on Docker")
929
965
  logger = logging.getLogger("ContainerManager")
930
966
  logger.debug(
@@ -952,8 +988,9 @@ async def compose_up(
952
988
  compose_file: str = Field(description="Path to compose file"),
953
989
  detach: bool = Field(description="Detach mode", default=True),
954
990
  build: bool = Field(description="Build images", default=False),
955
- manager_type: str = Field(
956
- description="Container manager: docker, podman", default="docker"
991
+ manager_type: Optional[str] = Field(
992
+ description="Container manager: docker, podman (default: auto-detect)",
993
+ default=environment_container_manager_type,
957
994
  ),
958
995
  silent: Optional[bool] = Field(
959
996
  description="Suppress output", default=environment_silent
@@ -989,8 +1026,9 @@ async def compose_up(
989
1026
  )
990
1027
  async def compose_down(
991
1028
  compose_file: str = Field(description="Path to compose file"),
992
- manager_type: str = Field(
993
- description="Container manager: docker, podman", default="docker"
1029
+ manager_type: Optional[str] = Field(
1030
+ description="Container manager: docker, podman (default: auto-detect)",
1031
+ default=environment_container_manager_type,
994
1032
  ),
995
1033
  silent: Optional[bool] = Field(
996
1034
  description="Suppress output", default=environment_silent
@@ -1026,8 +1064,9 @@ async def compose_down(
1026
1064
  )
1027
1065
  async def compose_ps(
1028
1066
  compose_file: str = Field(description="Path to compose file"),
1029
- manager_type: str = Field(
1030
- description="Container manager: docker, podman", default="docker"
1067
+ manager_type: Optional[str] = Field(
1068
+ description="Container manager: docker, podman (default: auto-detect)",
1069
+ default=environment_container_manager_type,
1031
1070
  ),
1032
1071
  silent: Optional[bool] = Field(
1033
1072
  description="Suppress output", default=environment_silent
@@ -1064,8 +1103,9 @@ async def compose_ps(
1064
1103
  async def compose_logs(
1065
1104
  compose_file: str = Field(description="Path to compose file"),
1066
1105
  service: Optional[str] = Field(description="Specific service", default=None),
1067
- manager_type: str = Field(
1068
- description="Container manager: docker, podman", default="docker"
1106
+ manager_type: Optional[str] = Field(
1107
+ description="Container manager: docker, podman (default: auto-detect)",
1108
+ default=environment_container_manager_type,
1069
1109
  ),
1070
1110
  silent: Optional[bool] = Field(
1071
1111
  description="Suppress output", default=environment_silent
@@ -1090,35 +1130,21 @@ async def compose_logs(
1090
1130
 
1091
1131
 
1092
1132
  def container_manager_mcp(argv):
1093
- transport = "stdio"
1094
- host = "0.0.0.0"
1095
- port = 8000
1096
- try:
1097
- opts, args = getopt.getopt(
1098
- argv,
1099
- "ht:h:p:",
1100
- ["help", "transport=", "host=", "port="],
1101
- )
1102
- except getopt.GetoptError:
1103
- logger = logging.getLogger("ContainerManager")
1104
- logger.error("Incorrect arguments")
1105
- sys.exit(2)
1106
- for opt, arg in opts:
1107
- if opt in ("-h", "--help"):
1108
- sys.exit(2)
1109
- elif opt in ("-t", "--transport"):
1110
- transport = arg
1111
- elif opt in ("-h", "--host"):
1112
- host = arg
1113
- elif opt in ("-p", "--port"):
1114
- try:
1115
- port = int(arg)
1116
- if not (0 <= port <= 65535):
1117
- print(f"Error: Port {arg} is out of valid range (0-65535).")
1118
- sys.exit(1)
1119
- except ValueError:
1120
- print(f"Error: Port {arg} is not a valid integer.")
1121
- sys.exit(1)
1133
+ parser = argparse.ArgumentParser(description="Container Manager MCP Server")
1134
+ parser.add_argument(
1135
+ "-t", "--transport", type=str, default="stdio", help="Transport (stdio/http)"
1136
+ )
1137
+ parser.add_argument("-h", "--host", type=str, default="0.0.0.0", help="Host")
1138
+ parser.add_argument("-p", "--port", type=int, default=8000, help="Port")
1139
+ args = parser.parse_args(argv)
1140
+
1141
+ transport = args.transport
1142
+ host = args.host
1143
+ port = args.port
1144
+ if not (0 <= port <= 65535):
1145
+ print(f"Error: Port {port} is out of valid range (0-65535).")
1146
+ sys.exit(1)
1147
+
1122
1148
  setup_logging(is_mcp_server=True, log_file="container_manager_mcp.log")
1123
1149
  if transport == "stdio":
1124
1150
  mcp.run(transport="stdio")
@@ -1130,9 +1156,5 @@ def container_manager_mcp(argv):
1130
1156
  sys.exit(1)
1131
1157
 
1132
1158
 
1133
- def main():
1134
- container_manager_mcp(sys.argv[1:])
1135
-
1136
-
1137
1159
  if __name__ == "__main__":
1138
1160
  container_manager_mcp(sys.argv[1:])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: container-manager-mcp
3
- Version: 0.0.11
3
+ Version: 1.0.0
4
4
  Summary: Container Manager manage Docker, Docker Swarm, and Podman containers as an MCP Server
5
5
  Author-email: Audel Rouhi <knucklessg1@gmail.com>
6
6
  License: MIT
@@ -48,7 +48,7 @@ Dynamic: license-file
48
48
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/container-manager-mcp)
49
49
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/container-manager-mcp)
50
50
 
51
- *Version: 0.0.11*
51
+ *Version: 1.0.0*
52
52
 
53
53
  Container Manager MCP Server provides a robust interface to manage Docker and Podman containers, networks, volumes, and Docker Swarm services through a FastMCP server, enabling programmatic and remote container management.
54
54
 
@@ -0,0 +1,10 @@
1
+ container_manager_mcp/__init__.py,sha256=N3bhKd_oh5YmBBl9N1omfZgaXhJyP0vOzH4VKxs68_g,506
2
+ container_manager_mcp/__main__.py,sha256=zic5tX336HG8LfdzQQ0sDVx-tMSOsgOZCtaxHWgJ4Go,134
3
+ container_manager_mcp/container_manager.py,sha256=9TPpZw2gB_rz4oLsu45jBeixkG9B-OYppsGM4ctqb5I,72495
4
+ container_manager_mcp/container_manager_mcp.py,sha256=_07WxzplAF7hqYB9FehVszVgcF5vFvmaqYdjbw34jA0,39766
5
+ container_manager_mcp-1.0.0.dist-info/licenses/LICENSE,sha256=Z1xmcrPHBnGCETO_LLQJUeaSNBSnuptcDVTt4kaPUOE,1060
6
+ container_manager_mcp-1.0.0.dist-info/METADATA,sha256=eHiLvq6m912lJ5VcPZJJR-C-DXWKwaog_FtXFZddiyg,8238
7
+ container_manager_mcp-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
+ container_manager_mcp-1.0.0.dist-info/entry_points.txt,sha256=I23pXcCgAShlfYbENzs3kbw3l1lU9Gy7lODPfRqeeiA,156
9
+ container_manager_mcp-1.0.0.dist-info/top_level.txt,sha256=B7QQLOd9mBdu0lsPKqyu4T8-zUtbqKzQJbMbtAzoozU,22
10
+ container_manager_mcp-1.0.0.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- container_manager_mcp/__init__.py,sha256=N3bhKd_oh5YmBBl9N1omfZgaXhJyP0vOzH4VKxs68_g,506
2
- container_manager_mcp/__main__.py,sha256=zic5tX336HG8LfdzQQ0sDVx-tMSOsgOZCtaxHWgJ4Go,134
3
- container_manager_mcp/container_manager.py,sha256=64pDF7gEadqh_rVqjfkznLSWm6fFnZJJ5hnkZlgX9kI,69338
4
- container_manager_mcp/container_manager_mcp.py,sha256=cIAN8YGflQ9nZEHodkYdQKo2GECAuTH7WB-oMhnAd_0,37959
5
- container_manager_mcp-0.0.11.dist-info/licenses/LICENSE,sha256=Z1xmcrPHBnGCETO_LLQJUeaSNBSnuptcDVTt4kaPUOE,1060
6
- container_manager_mcp-0.0.11.dist-info/METADATA,sha256=bQQ_l-V1ZAh5ciFG00U0hLIqttSm45RjO_9Va7DKinU,8240
7
- container_manager_mcp-0.0.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
8
- container_manager_mcp-0.0.11.dist-info/entry_points.txt,sha256=I23pXcCgAShlfYbENzs3kbw3l1lU9Gy7lODPfRqeeiA,156
9
- container_manager_mcp-0.0.11.dist-info/top_level.txt,sha256=B7QQLOd9mBdu0lsPKqyu4T8-zUtbqKzQJbMbtAzoozU,22
10
- container_manager_mcp-0.0.11.dist-info/RECORD,,