awslabs.terraform-mcp-server 0.0.8__tar.gz → 0.0.10__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.

Potentially problematic release.


This version of awslabs.terraform-mcp-server might be problematic. Click here for more details.

Files changed (51) hide show
  1. awslabs_terraform_mcp_server-0.0.10/Dockerfile +75 -0
  2. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/PKG-INFO +24 -1
  3. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/README.md +23 -0
  4. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/resources/terraform_aws_provider_resources_listing.py +1 -1
  5. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/resources/terraform_awscc_provider_resources_listing.py +1 -1
  6. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/scripts/generate_aws_provider_resources.py +2 -1
  7. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/scripts/generate_awscc_provider_resources.py +6 -2
  8. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/__init__.py +3 -3
  9. awslabs_terraform_mcp_server-0.0.10/docker-healthcheck.sh +12 -0
  10. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/pyproject.toml +1 -1
  11. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/uv.lock +4 -4
  12. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/.gitignore +0 -0
  13. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/.pre-commit-config.yaml +0 -0
  14. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/.python-version +0 -0
  15. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/CHANGELOG.md +0 -0
  16. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/__init__.py +0 -0
  17. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/__init__.py +0 -0
  18. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/resources/__init__.py +0 -0
  19. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/__init__.py +0 -0
  20. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/execute_terraform_command.py +0 -0
  21. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/run_checkov_scan.py +0 -0
  22. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/search_aws_provider_docs.py +0 -0
  23. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/search_awscc_provider_docs.py +0 -0
  24. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/search_specific_aws_ia_modules.py +0 -0
  25. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/search_user_provided_module.py +0 -0
  26. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/impl/tools/utils.py +0 -0
  27. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/models/__init__.py +0 -0
  28. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/models/models.py +0 -0
  29. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/scripts/scrape_aws_terraform_best_practices.py +0 -0
  30. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/server.py +0 -0
  31. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/AWSCC_PROVIDER_RESOURCES.md +0 -0
  32. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/AWS_PROVIDER_RESOURCES.md +0 -0
  33. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/AWS_TERRAFORM_BEST_PRACTICES.md +0 -0
  34. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/MCP_INSTRUCTIONS.md +0 -0
  35. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/awslabs/terraform_mcp_server/static/TERRAFORM_WORKFLOW_GUIDE.md +0 -0
  36. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/run_tests.sh +0 -0
  37. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/.gitignore +0 -0
  38. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/README.md +0 -0
  39. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/__init__.py +0 -0
  40. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/conftest.py +0 -0
  41. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_command_impl.py +0 -0
  42. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_execute_terraform_command.py +0 -0
  43. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_models.py +0 -0
  44. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_parameter_annotations.py +0 -0
  45. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_resources.py +0 -0
  46. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_run_checkov_scan.py +0 -0
  47. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_search_user_provided_module.py +0 -0
  48. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_server.py +0 -0
  49. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_tool_implementations.py +0 -0
  50. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_utils.py +0 -0
  51. {awslabs_terraform_mcp_server-0.0.8 → awslabs_terraform_mcp_server-0.0.10}/tests/test_utils_additional.py +0 -0
@@ -0,0 +1,75 @@
1
+ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
4
+ # with the License. A copy of the License is located at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
9
+ # OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
10
+ # and limitations under the License.
11
+
12
+ #FROM public.ecr.aws/sam/build-python3.10:1.137.1-20250411084548
13
+ FROM public.ecr.aws/sam/build-python3.10@sha256:04cdbe84bec08d17d621192bc3f0a9e4a85a83f2ac99aa9241659dfac0d845ea AS uv
14
+
15
+ # Install the project into `/app`
16
+ WORKDIR /app
17
+
18
+ # Enable bytecode compilation
19
+ ENV UV_COMPILE_BYTECODE=1
20
+
21
+ # Copy from the cache instead of linking since it's a mounted volume
22
+ ENV UV_LINK_MODE=copy
23
+
24
+ # Prefer the system python
25
+ ENV UV_PYTHON_PREFERENCE=only-system
26
+
27
+ # Run without updating the uv.lock file like running with `--frozen`
28
+ ENV UV_FROZEN=true
29
+
30
+ # Copy the required files first
31
+ COPY pyproject.toml uv.lock ./
32
+
33
+ # Install the project's dependencies using the lockfile and settings
34
+ RUN --mount=type=cache,target=/root/.cache/uv \
35
+ pip install uv && \
36
+ uv sync --frozen --no-install-project --no-dev --no-editable
37
+
38
+ # Then, add the rest of the project source code and install it
39
+ # Installing separately from its dependencies allows optimal layer caching
40
+ COPY . /app
41
+ RUN --mount=type=cache,target=/root/.cache/uv \
42
+ uv sync --frozen --no-dev --no-editable
43
+
44
+ # Make the directory just in case it doesn't exist
45
+ RUN mkdir -p /root/.local
46
+
47
+ FROM public.ecr.aws/sam/build-python3.10@sha256:04cdbe84bec08d17d621192bc3f0a9e4a85a83f2ac99aa9241659dfac0d845ea
48
+
49
+ # Place executables in the environment at the front of the path and include other binaries
50
+ ENV PATH="/app/.venv/bin:$PATH:/usr/sbin"
51
+
52
+ # Install lsof for the healthcheck
53
+ # Install other tools as needed for the MCP server
54
+ # Add non-root user and ability to change directory into /root
55
+ RUN yum update -y && \
56
+ yum install -y lsof && \
57
+ yum clean all -y && \
58
+ rm -rf /var/cache/yum && \
59
+ groupadd --force --system app && \
60
+ useradd app -g app -d /app && \
61
+ chmod o+x /root
62
+
63
+ # Get the project from the uv layer
64
+ COPY --from=uv --chown=app:app /root/.local /root/.local
65
+ COPY --from=uv --chown=app:app /app/.venv /app/.venv
66
+
67
+ # Get healthcheck script
68
+ COPY ./docker-healthcheck.sh /usr/local/bin/docker-healthcheck.sh
69
+
70
+ # Run as non-root
71
+ USER app
72
+
73
+ # When running the container, add --db-path and a bind mount to the host's db file
74
+ HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD [ "docker-healthcheck.sh" ]
75
+ ENTRYPOINT ["awslabs.terraform-mcp-server"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: awslabs.terraform-mcp-server
3
- Version: 0.0.8
3
+ Version: 0.0.10
4
4
  Summary: An AWS Labs Model Context Protocol (MCP) server for terraform
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: beautifulsoup4>=4.12.0
@@ -90,6 +90,29 @@ Here are some ways you can work with MCP across AWS, and we'll be adding support
90
90
  }
91
91
  ```
92
92
 
93
+ or docker after a succesful `docker build -t awslabs/terraform-mcp-server .`:
94
+
95
+ ```json
96
+ {
97
+ "mcpServers": {
98
+ "awslabs.terraform-mcp-server": {
99
+ "command": "docker",
100
+ "args": [
101
+ "run",
102
+ "--rm",
103
+ "--interactive",
104
+ "--env",
105
+ "FASTMCP_LOG_LEVEL=ERROR",
106
+ "awslabs/terraform-mcp-server:latest"
107
+ ],
108
+ "env": {},
109
+ "disabled": false,
110
+ "autoApprove": []
111
+ }
112
+ }
113
+ }
114
+ ```
115
+
93
116
  ## Security Considerations
94
117
 
95
118
  When using this MCP server, you should consider:
@@ -75,6 +75,29 @@ Here are some ways you can work with MCP across AWS, and we'll be adding support
75
75
  }
76
76
  ```
77
77
 
78
+ or docker after a succesful `docker build -t awslabs/terraform-mcp-server .`:
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "awslabs.terraform-mcp-server": {
84
+ "command": "docker",
85
+ "args": [
86
+ "run",
87
+ "--rm",
88
+ "--interactive",
89
+ "--env",
90
+ "FASTMCP_LOG_LEVEL=ERROR",
91
+ "awslabs/terraform-mcp-server:latest"
92
+ ],
93
+ "env": {},
94
+ "disabled": false,
95
+ "autoApprove": []
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
78
101
  ## Security Considerations
79
102
 
80
103
  When using this MCP server, you should consider:
@@ -39,7 +39,7 @@ async def terraform_aws_provider_assets_listing_impl() -> str:
39
39
  # Check if the static file exists
40
40
  if STATIC_RESOURCES_PATH.exists():
41
41
  # Read the static file content
42
- with open(STATIC_RESOURCES_PATH, 'r') as f:
42
+ with open(STATIC_RESOURCES_PATH, 'r', encoding='utf-8') as f:
43
43
  content = f.read()
44
44
  logger.info('Successfully loaded AWS Provider asset list')
45
45
  return content
@@ -39,7 +39,7 @@ async def terraform_awscc_provider_resources_listing_impl() -> str:
39
39
  # Check if the static file exists
40
40
  if STATIC_RESOURCES_PATH.exists():
41
41
  # Read the static file content
42
- with open(STATIC_RESOURCES_PATH, 'r') as f:
42
+ with open(STATIC_RESOURCES_PATH, 'r', encoding='utf-8') as f:
43
43
  content = f.read()
44
44
 
45
45
  logger.info(
@@ -372,6 +372,7 @@ async def fetch_aws_provider_page() -> ProviderResult:
372
372
  prefix='terraform_aws_debug_playwright_',
373
373
  suffix='.html',
374
374
  mode='w',
375
+ encoding='utf-8',
375
376
  delete=False,
376
377
  ) as temp_file:
377
378
  temp_file.write(content)
@@ -1208,7 +1209,7 @@ async def main():
1208
1209
  args.output.parent.mkdir(parents=True, exist_ok=True)
1209
1210
 
1210
1211
  # Write markdown to output file
1211
- with open(args.output, 'w') as f:
1212
+ with open(args.output, 'w', encoding='utf-8') as f:
1212
1213
  f.write('\n'.join(markdown))
1213
1214
 
1214
1215
  print(f'Successfully generated markdown file at: {args.output}')
@@ -317,7 +317,11 @@ async def fetch_awscc_provider_page():
317
317
 
318
318
  # Save HTML for debugging using tempfile for security
319
319
  with tempfile.NamedTemporaryFile(
320
- prefix='terraform_awscc_debug_playwright_', suffix='.html', mode='w', delete=False
320
+ prefix='terraform_awscc_debug_playwright_',
321
+ suffix='.html',
322
+ mode='w',
323
+ encoding='utf-8',
324
+ delete=False,
321
325
  ) as temp_file:
322
326
  temp_file.write(content)
323
327
  debug_file_path = temp_file.name
@@ -1004,7 +1008,7 @@ async def main():
1004
1008
  args.output.parent.mkdir(parents=True, exist_ok=True)
1005
1009
 
1006
1010
  # Write markdown to output file
1007
- with open(args.output, 'w') as f:
1011
+ with open(args.output, 'w', encoding='utf-8') as f:
1008
1012
  f.write('\n'.join(markdown))
1009
1013
 
1010
1014
  print(f'Successfully generated markdown file at: {args.output}')
@@ -3,20 +3,20 @@ from importlib import resources
3
3
  with (
4
4
  resources.files('awslabs.terraform_mcp_server.static')
5
5
  .joinpath('MCP_INSTRUCTIONS.md')
6
- .open('r') as f
6
+ .open('r', encoding='utf-8') as f
7
7
  ):
8
8
  MCP_INSTRUCTIONS = f.read()
9
9
 
10
10
  with (
11
11
  resources.files('awslabs.terraform_mcp_server.static')
12
12
  .joinpath('TERRAFORM_WORKFLOW_GUIDE.md')
13
- .open('r') as f
13
+ .open('r', encoding='utf-8') as f
14
14
  ):
15
15
  TERRAFORM_WORKFLOW_GUIDE = f.read()
16
16
 
17
17
  with (
18
18
  resources.files('awslabs.terraform_mcp_server.static')
19
19
  .joinpath('AWS_TERRAFORM_BEST_PRACTICES.md')
20
- .open('r') as f
20
+ .open('r', encoding='utf-8') as f
21
21
  ):
22
22
  AWS_TERRAFORM_BEST_PRACTICES = f.read()
@@ -0,0 +1,12 @@
1
+ #!/bin/sh
2
+
3
+ if [ "$(lsof +c 0 -p 1 | grep -e grep -e "^awslabs\..*\s1\s.*\unix\s.*socket$" | wc -l)" -ne "0" ]; then
4
+ echo -n "$(lsof +c 0 -p 1 | grep -e grep -e "^awslabs\..*\s1\s.*\unix\s.*socket$" | wc -l) awslabs.* streams found";
5
+ exit 0;
6
+ else
7
+ echo -n "Zero awslabs.* streams found";
8
+ exit 1;
9
+ fi;
10
+
11
+ echo -n "Never should reach here";
12
+ exit 99;
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "awslabs.terraform-mcp-server"
3
- version = "0.0.8"
3
+ version = "0.0.10"
4
4
  description = "An AWS Labs Model Context Protocol (MCP) server for terraform"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -179,7 +179,7 @@ wheels = [
179
179
 
180
180
  [[package]]
181
181
  name = "awslabs-terraform-mcp-server"
182
- version = "0.0.7"
182
+ version = "0.0.9"
183
183
  source = { editable = "." }
184
184
  dependencies = [
185
185
  { name = "beautifulsoup4" },
@@ -482,7 +482,7 @@ wheels = [
482
482
 
483
483
  [[package]]
484
484
  name = "checkov"
485
- version = "3.2.407"
485
+ version = "3.2.408"
486
486
  source = { registry = "https://pypi.org/simple" }
487
487
  dependencies = [
488
488
  { name = "aiodns" },
@@ -529,9 +529,9 @@ dependencies = [
529
529
  { name = "typing-extensions" },
530
530
  { name = "yarl" },
531
531
  ]
532
- sdist = { url = "https://files.pythonhosted.org/packages/07/25/5eb6b544c96f1ffe2f05203d2964380665a6c4485d28de114579e5315f84/checkov-3.2.407.tar.gz", hash = "sha256:f1beb464fd90f79620ef69b17cec529d1b42b5e8c91512ead527c58aaea216b5", size = 978297 }
532
+ sdist = { url = "https://files.pythonhosted.org/packages/b0/f4/5bbd14da357dabbb32b9a1e52df7fb05946cde2098947f9d24fbd42671e7/checkov-3.2.408.tar.gz", hash = "sha256:952e7c069bf94df3f1178ee73c05305bdc8dee1a4c32b725f47c78cbd2b2a500", size = 977385 }
533
533
  wheels = [
534
- { url = "https://files.pythonhosted.org/packages/7b/24/d04cac226e1be6b8c0443c8ef3087187d5e032ce7d93c578c51a911c885b/checkov-3.2.407-py3-none-any.whl", hash = "sha256:56feb41274a7d17a42599189d7c916c8fcd820b3ba7130015c0500f739052f74", size = 2280993 },
534
+ { url = "https://files.pythonhosted.org/packages/b6/dd/6e8db31da67b5c49a08553d1977468201a4f731d54b4e047f08214b1cc98/checkov-3.2.408-py3-none-any.whl", hash = "sha256:f6df07a44e38655a273e17e029932fe299a79efc2fa9c64e706564852dbc9631", size = 2282126 },
535
535
  ]
536
536
 
537
537
  [[package]]