{"_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","_rev":"15-e20932529450c7c1d9ccc77c22f7d912","name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","dist-tags":{"latest":"5.2.8"},"versions":{"0.1.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"0.1.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@0.1.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"16198c356de5e7ff9cfc48e452107d16ab72d3fe","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-0.1.0.tgz","fileCount":19,"integrity":"sha512-6m1iAyf0n/2yxUE3gS4g3hQyzZPo6W7t2+thypjcXP23MqwmL5veLuOmE72WtLTkV29xWUa/LEv6EJwTOSdxbQ==","signatures":[{"sig":"MEUCIQCEmTXJnTyOrGBL8/74Nrv00Ld1eyRd8WkbUgqNECaChwIgQYKdQ8GBzlLgaFFV9LYa7QC8W6E41gFYf9dicvMkkK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33219},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.0.0"},"gitHead":"c0d08848d57e80bf62bece8f045e5d508772f198","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint --ext .ts src tests","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","test:watch":"vitest"},"_npmUser":{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"25.6.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"8.57.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.3.5","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_0.1.0_1772896836529_0.3101741651565544","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"2.1.3","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@2.1.3","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"51f079ac98f991b9ca9f535ca3446b987ddde0ae","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-2.1.3.tgz","fileCount":79,"integrity":"sha512-4IUERx4wCdC55kamHzArLnJHUG7MhC9+Yqi9/0k8QMxIcyOFmLVjh8lSnfUyMKuqVwlwQJK+/au2jI87TuckQQ==","signatures":[{"sig":"MEYCIQDDIt/FSMi83ki6YMIkA1zpJJ55nzd4LRd9EmWdSLqQQgIhAPbksvaBhdUXcjOmaVRI5aKD1hO1/YO/LjAIIDb1AL42","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@2.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209269},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"97ff45f819b25e6c119998392349ca88d89e45d8","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"8.57.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.3.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_2.1.3_1773144967631_0.9894047673971638","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"2.1.4","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@2.1.4","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"46c69b6df082da2971ad43d10281b69ecd8f2dba","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-2.1.4.tgz","fileCount":79,"integrity":"sha512-QzbZexDBv1fjeHeGb/8q2rvMQLx86sa2uXdz+0mlFS2s85AkjDMpa+lZE9icPewK4EZWyZ+lh0QaknP0mdPIew==","signatures":[{"sig":"MEYCIQCKU1hZRMgrxeRLErO6yJ5zGCU9ezymB8CNfexXA/OBHgIhALnqDR1VA2IL149DLyiT+8r57yLOiwgQrxoTbKHqSpaf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@2.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209270},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"17e68308b067cf123b19380f2fe6048aec5acaef","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^3.25.76","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"8.57.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.3.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_2.1.4_1773146993335_0.8153165621033898","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"3.0.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@3.0.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"7fc8c1c8e35b2bd9b79f8f8c394c9d318f4f93af","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-3.0.0.tgz","fileCount":79,"integrity":"sha512-i24VhZdhWPYvNR6wBb9T0ebkgP+2TirMGemE1S16FrlI/VsdhmNnjhxmpKF/hmnUUEXmWaqtlo/AXPkJGbwAVw==","signatures":[{"sig":"MEYCIQD/ohWgGFc74yvfRayBjFx1ON8meRo5DTUFyQbYDKzHTAIhAMKa+XrQM41/w2rRolkKZrSCnYoBueVUDoArTG83XzOa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204373},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"5e921222680d465e45324ccaeb6c7e585cfc46be","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"8.57.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.3.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_3.0.0_1773147061173_0.11225537810400477","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"4.0.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@4.0.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"643d4287abd09da1d53217e10e16ab30d675c0db","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-4.0.0.tgz","fileCount":79,"integrity":"sha512-TaUIPhOz9dxw8vpidtrx3vLR7WVQDmysn2ATdb6q43g5eSamjcAFX4c+UYQ3PtDt+zJdYWwgoj5K908hkUyIPw==","signatures":[{"sig":"MEUCIQDxqeNX1sr9jcZKE5e75UdHLvHIGfRCH/76ckTziRjilAIgTCbS60NbBSrnhlNvvIZvSQaOrXrMKAXiVLMwteTToWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@4.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204373},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"c65c0004c9df6aafd936e8b331e46eaf95f0f9a6","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"8.57.1","vitest":"4.0.18","typescript":"5.9.3","@types/node":"25.3.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_4.0.0_1773148623085_0.8177204026693639","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.0.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.0.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"a7ea3fddb99134e6cffd89f144a657f5653eee12","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.0.0.tgz","fileCount":79,"integrity":"sha512-ixJTLNg8AYeB2ITj58qDY5frHwHEZR1io9HlKoMhVBowRxrg8rkMzR6rm+SJMDCu/25O+GK7A81Z60oWx5AZFQ==","signatures":[{"sig":"MEUCIF4jvTwnSTVZgVlh6XZegeZWiImEuXUZe+dyzBzb1cTCAiEAqnCJoZLZ6Qb+MmflRY7IJcy2b61OBP6jQv5TtOwI3As=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204402},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"e9618c03d38f464f54aa8082124195b8d44cdc41","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.0.18","@eslint/js":"^9.38.0","typescript":"5.9.3","@types/node":"25.3.5","@vitest/coverage-v8":"^4.0.18","@typescript-eslint/parser":"8.56.1","@typescript-eslint/eslint-plugin":"8.56.1"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.0.0_1773148691092_0.7033798657934329","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.0.1","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.0.1","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"e7580474d639273793db2608e35ff7701a75024d","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.0.1.tgz","fileCount":79,"integrity":"sha512-5Qa/d8z+i6n3Guy79Jly1QQ4ScItcovic7XwKaSbZzHFoGj9SNIt4zlHEbyHg5vJby53jsCe4t1CsnTAfQf6DA==","signatures":[{"sig":"MEYCIQDOiQdAmO2cbLWYIKA1l4TkLNwK5cHGZWMZMSSbuIGIwwIhAPCybuehGOL55XI9oYVJmLupTgPJUgIrLzxuCgtcX29y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"2f01ffb8fefc0b09be3b9d547fbaf3dbcbbc87be","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.0.1_1773477257636_0.092499496414292","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.1.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.1.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"8d1c5891ddabb99c5b8f0b897317ef9a6ecd8a17","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.1.0.tgz","fileCount":79,"integrity":"sha512-NPcC7mpFbUWLJjYcs+d9gTZfntS3zNqsXVRD4AeY2ftUxNFRyheMS1gZHp4LnGlvrQwT710sRshXIztt+ez2nw==","signatures":[{"sig":"MEUCIHJB7USIj1fz9LD6RRp+xKWQZuLiUhHUTbMw4HpRv0PhAiEA8NB6dPvxn+ZVLKVmr3YRxIdT0tIjlgxrKUUItr5tz9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"bfda79817d2c8386a622e82a185b8423f0cdf853","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.1.0_1773645372032_0.0724782736331917","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.0","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.0","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"d2f9bc895ac1d58b0205d346b10d9c97b945c059","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.0.tgz","fileCount":79,"integrity":"sha512-cG2mJeC1Z/egWt1Cz+yyScDlV0XxzuhBDuXT962zGvPcDUJZbFIkGY+Gwhqw3tcaB+g2eto7MiO8y/t4Nkor8A==","signatures":[{"sig":"MEUCIFJuDWZquPXrDZffEhlH0FHmVAHnjMENbcB0Bv/gX3IAAiEA13gOpemw4zml4uxHlJbN8BM7w5Cb/EiWWarFLEFkyFA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"73071b8389032a8193c7a6119564eeea176a2482","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.0_1773645444148_0.4769992131905956","host":"s3://npm-registry-packages-npm-production"}},"5.2.1":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.1","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.1","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"7ed9e4973c8c11b825e89c491c449e6d6c275730","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.1.tgz","fileCount":79,"integrity":"sha512-ptptMawPw7NBIEHJCIInoV/AM2C2he5D4BMAdj4nI1+pA6w7Cd4vxz0quDLzgc3lIXLxylp1O5LGhO7T5B6nrA==","signatures":[{"sig":"MEUCID6UIweoSHZmVUtPflgP7Drym+YjhhG4zPa6C/I0evf2AiEA8s6k7Qv8096xncCCymsw8U7c5QEfApIY0MVT4S993Q0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"73708ad3f39b0ff17d41bdeb426024a313922560","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.1_1773949039366_0.3952352875821388","host":"s3://npm-registry-packages-npm-production"}},"5.2.3":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.3","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.3","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"99c6c380f95f0c55fa1a951ea4c945256427261c","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.3.tgz","fileCount":79,"integrity":"sha512-pfXuHWaqw2Cwx3ndxgFzFori37MTnjsC2uSMomIdaSK7rh0InyIMdZUYcFFPT6dq3DGRFRhQzDd5zft30zMzOQ==","signatures":[{"sig":"MEUCIQDj40kRYgqyhExu7oiTRYQ5gV1tPOIevm5qL+2udyQtmAIgFZ1wbrKio54OWNtbBKWggVoyrZFESuBO9zMKK/evTGM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.0"},"gitHead":"b10775da4c651aa57b879a78ee5f65a77f045737","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.3_1775029694478_0.9632758666810197","host":"s3://npm-registry-packages-npm-production"}},"5.2.4":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.4","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.4","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"2414c175d80dcaf093b1fb103aa88926e5d3ba68","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.4.tgz","fileCount":79,"integrity":"sha512-mE4vsNd2/D72PjP2qvsAU4XHPtyRYKRnVeHr9+wQSWxVYNRz5OslL8b4+WBs5/mj5e3Tbzw0AsN4OpQ36pq9nQ==","signatures":[{"sig":"MEUCIQCAp7HIv7IukXsMvI4Bk0wPDW8GMpCNWI2bpbhqMX7LuQIgcy0BpHULKjtYw471pKN61TKeCcfYYIEWFCt3fbrTim4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.1"},"gitHead":"7cfc7c37bcb9b34f35df9ecffc1c9e5b2e927111","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.4_1775209476222_0.7911444656173405","host":"s3://npm-registry-packages-npm-production"}},"5.2.5":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.5","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.5","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"14a96218b8e8fccffde8662c6457ac644c80f520","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.5.tgz","fileCount":79,"integrity":"sha512-8QLqS9FZrcjAaBc2I3nF84JCId8aDRoYOjIhWNu9m1I6/MGpdIKQA2eajQHHH7kFcFBB4FGSMCQMh+Z1luefWA==","signatures":[{"sig":"MEYCIQCK7Le6gjqdSMehiTn6tkPakm9PHVmyrSDcjV1MhDB/ZQIhAKkS5NFLPmBQ4ph0PHbvkerfgBmC2OJQFCdz5AsjPymu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.1"},"gitHead":"be24ee027580cf6898fd09c338cc553474bfe3d0","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.9.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.5_1775209543530_0.652708491245569","host":"s3://npm-registry-packages-npm-production"}},"5.2.6":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.6","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"license":"MIT","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.6","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"dist":{"shasum":"1c2968a52f3ca84a58124994b3d1a0f6521fb47b","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.6.tgz","fileCount":79,"integrity":"sha512-K29vs9MyYSDRJCbdVQzcFvA6EETCdffAjLucDrve1F3j9AXL+eXuj8FM//W1JwvMvi5m+zFWraGOD3nMGkgHvA==","signatures":[{"sig":"MEQCIAi2+vuY+QCoxOivIqGFnBOC39f1fDo/4/Zp9P1UT2c8AiA+tGJc6XWTUeslyiZRq3A5bZmR6Y11sZTgJZgdsIr7/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":204400},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=24.14.1"},"gitHead":"1a3420ddeffef9371c15caa48e07c736a0a8781e","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","scripts":{"dev":"tsx src/index.ts","lint":"eslint src tests --ext .ts","test":"vitest run","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","start":"node dist/index.js","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"repository":{"url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","@modelcontextprotocol/sdk":"1.27.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","eslint":"10.0.3","vitest":"4.1.0","@eslint/js":"^9.39.4","typescript":"5.9.3","@types/node":"25.5.0","@vitest/coverage-v8":"^4.1.0","@typescript-eslint/parser":"8.57.0","@typescript-eslint/eslint-plugin":"8.57.0"},"_npmOperationalInternal":{"tmp":"tmp/terraform-best-practices-mcp-server_5.2.6_1775209647740_0.6685343535996326","host":"s3://npm-registry-packages-npm-production"}},"5.2.8":{"name":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server","version":"5.2.8","mcpName":"io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices","description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","type":"module","main":"dist/index.js","types":"dist/index.d.ts","bin":{"terraform-best-practices-mcp-server":"dist/index.js"},"mcp":{"name":"terraform-best-practices","description":"Terraform best-practice, security, lint, and cost analysis via MCP"},"keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"author":{"name":"Carl Dawson"},"repository":{"type":"git","url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git"},"homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"engines":{"node":">=24.14.1"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx src/index.ts","start":"node dist/index.js","check":"tsc --noEmit -p tsconfig.json","lint":"eslint src tests --ext .ts","test":"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest","docs:links":"npx --yes markdown-link-check -c .markdown-link-check.json README.md docs/*.md"},"dependencies":{"@modelcontextprotocol/sdk":"1.27.1","zod":"^4.3.6"},"devDependencies":{"@eslint/js":"^9.39.4","@types/node":"25.5.0","@typescript-eslint/eslint-plugin":"8.57.0","@typescript-eslint/parser":"8.57.0","@vitest/coverage-v8":"^4.1.0","eslint":"10.0.3","tsx":"4.21.0","typescript":"5.9.3","vitest":"4.1.0"},"license":"MIT","gitHead":"c49c5ba0546926a6a2f8c3734535ac60cee8012b","_id":"@downatthebottomofthemolehole/terraform-best-practices-mcp-server@5.2.8","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-GMg1qyzybhLJd2l0xHu7qyicwugmDbG3BsPt/F1fKFrxkmXzkECw5DAz0H0Z2p10NzWrvJLrWnsHgHs5uKBIUw==","shasum":"eed0ddd3b58293bde0dbdeffde3f8cb814a915a6","tarball":"https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server/-/terraform-best-practices-mcp-server-5.2.8.tgz","fileCount":79,"unpackedSize":204400,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@downatthebottomofthemolehole%2fterraform-best-practices-mcp-server@5.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEMCHxvYsxUZ+elkSfNVNpMrMegyM+AhAyqILCdZhuOgGxgCIHtbsGLQzJ2LUpeuo9ORrSy9om5g9P8m6Jx9HwfF2uTt"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:1e3d3644-718d-489c-8a1e-1364b73ef34f"}},"directories":{},"maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/terraform-best-practices-mcp-server_5.2.8_1775223489278_0.6219947702192403"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-07T15:20:36.424Z","modified":"2026-04-03T13:38:10.674Z","0.1.0":"2026-03-07T15:20:36.668Z","2.1.3":"2026-03-10T12:16:07.769Z","2.1.4":"2026-03-10T12:49:53.487Z","3.0.0":"2026-03-10T12:51:01.325Z","4.0.0":"2026-03-10T13:17:03.233Z","5.0.0":"2026-03-10T13:18:11.294Z","5.0.1":"2026-03-14T08:34:17.790Z","5.1.0":"2026-03-16T07:16:12.179Z","5.2.0":"2026-03-16T07:17:24.306Z","5.2.1":"2026-03-19T19:37:19.590Z","5.2.3":"2026-04-01T07:48:14.694Z","5.2.4":"2026-04-03T09:44:36.381Z","5.2.5":"2026-04-03T09:45:43.677Z","5.2.6":"2026-04-03T09:47:27.951Z","5.2.8":"2026-04-03T13:38:09.435Z"},"bugs":{"url":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/issues"},"author":{"name":"Carl Dawson"},"license":"MIT","homepage":"https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp","keywords":["mcp","terraform","best-practices","infracost","tflint","checkov","trivy","kics","azure","aws","gcp"],"repository":{"type":"git","url":"git+https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp.git"},"description":"MCP server for Terraform cost, lint, security, and cloud best-practice guidance.","maintainers":[{"name":"rolfmoleman","email":"carl.dawson3@btinternet.com"}],"readme":"# Terraform Best Practices MCP Server\n\n<!-- mcp-name: io.github.DownAtTheBottomOfTheMoleHole/terraform-best-practices -->\n\n[![CI/Publish](https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/actions/workflows/publish-mcp.yml/badge.svg)](https://github.com/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/actions/workflows/publish-mcp.yml)\n[![Coverage](https://codecov.io/github/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp/graph/badge.svg?branch=main)](https://codecov.io/github/DownAtTheBottomOfTheMoleHole/terraform-best-practices-mcp)\n[![npm](https://img.shields.io/npm/v/@downatthebottomofthemolehole/terraform-best-practices-mcp-server.svg)](https://registry.npmjs.org/@downatthebottomofthemolehole/terraform-best-practices-mcp-server)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Node Version](https://img.shields.io/badge/node-%3E%3D24.14.0-brightgreen)](https://nodejs.org/)\n\n> **Note:** This is a community-maintained MCP server. It is not an official Model Context Protocol server from HashiCorp or any cloud provider.\n\nA Model Context Protocol (MCP) server for producing better Terraform through CLI analysis (`tflint`, `checkov`, `trivy`, `kics`, `infracost`), best-practice guidance from [terraform-best-practices.com](https://www.terraform-best-practices.com/), cloud provider recommendations (Azure, AWS, GCP), and Terraform Registry resource and module guidance.\n\n## Overview\n\nThis server provides eighteen MCP tools across CLI analysis, best-practice retrieval, and interactive reporting workflows:\n\n- `run_tflint` to lint Terraform code.\n- `run_checkov` to run security and compliance scanning.\n- `run_trivy` to scan Terraform configuration for vulnerabilities.\n- `run_kics` to run IaC security and compliance scanning.\n- `run_infracost` to estimate cloud costs.\n- `fetch_terraform_best_practices` to retrieve curated Terraform best practices.\n- `fetch_provider_best_practices` to retrieve cloud provider Terraform guidance.\n- `fetch_terraform_registry_guidance` to retrieve Terraform Registry resource and module guidance.\n- `analyze_terraform_code` to analyze code structure, modularity, and best practices.\n- `analyze_terraform_performance` to identify runtime and performance bottlenecks.\n- `analyze_state_management` to assess backend state strategy and collaboration safety.\n- `generate_cost_report` to generate cost analysis with optimization suggestions.\n- `generate_terraform_module_docs` to produce module documentation from Terraform code.\n- `recommend_terraform_modules` to recommend reusable modules from detected patterns.\n- `suggest_terraform_architecture` to suggest multi-environment and multi-region patterns.\n- `suggest_terraform_testing_strategy` to recommend CI-driven testing by risk profile.\n- `suggest_security_hardening` to provide security hardening recommendations.\n- `generate_compliance_summary` to create compliance reports from scan outputs.\n\n### Platform Compatibility\n\nThis MCP server is platform-agnostic and works in local and CI environments:\n\n- Local development\n- GitHub Actions\n- GitLab CI/CD\n- Azure DevOps\n- CircleCI, Jenkins, and Bitbucket Pipelines\n- AI Agents and Copilot workflows\n\nThe primary requirements are Node.js and optionally the CLI tools on `PATH`. If a CLI is missing, the server returns installation guidance instead of failing silently.\n\n### Tool Matrix\n\n| Tool | Category | Typical outcome |\n| --- | --- | --- |\n| `run_tflint` | CLI Analysis | Lint findings for Terraform code |\n| `run_checkov` | CLI Analysis | Security and compliance scan results |\n| `run_trivy` | CLI Analysis | Vulnerability scan results for IaC |\n| `run_kics` | CLI Analysis | IaC security findings |\n| `run_infracost` | CLI Analysis | Monthly cost baseline for current IaC |\n| `fetch_terraform_best_practices` | Guidance | Curated best-practice checklist from terraform-best-practices.com |\n| `fetch_provider_best_practices` | Guidance | Cloud provider (Azure/AWS/GCP) Terraform recommendations |\n| `fetch_terraform_registry_guidance` | Guidance | Registry guidance for providers, resources, and modules |\n| `analyze_terraform_code` | Analysis | Code structure and modularity assessment |\n| `analyze_terraform_performance` | Analysis | Performance bottleneck and optimization report |\n| `analyze_state_management` | Analysis | State backend strategy and collaboration safety review |\n| `generate_cost_report` | Reporting | Cost analysis with optimization suggestions |\n| `generate_terraform_module_docs` | Reporting | Generated module documentation markdown |\n| `recommend_terraform_modules` | Reporting | Reusable module recommendations from code patterns |\n| `suggest_terraform_architecture` | Architecture | Multi-environment and multi-region architecture patterns |\n| `suggest_terraform_testing_strategy` | Testing | CI-driven testing strategy by risk profile |\n| `suggest_security_hardening` | Security | Security hardening recommendations from scan output |\n| `generate_compliance_summary` | Compliance | Compliance report from scan outputs |\n\n## Tools\n\n### `run_tflint`\n\nRun tflint against a Terraform project directory.\n\nInputs:\n\n- `path` (string, optional): Terraform project path to scan. Default: `.`.\n- `extraArgs` (string[], optional): Extra CLI arguments.\n- `timeoutMs` (integer, optional): Command timeout in milliseconds.\n\n### `run_checkov`\n\nRun checkov over a Terraform directory.\n\nInputs:\n\n- `path` (string, optional): Terraform project path to scan. Default: `.`.\n- `extraArgs` (string[], optional): Extra CLI arguments.\n- `timeoutMs` (integer, optional): Command timeout in milliseconds.\n\n### `run_trivy`\n\nRun trivy config scanning against Terraform code.\n\nInputs:\n\n- `path` (string, optional): Terraform project path to scan. Default: `.`.\n- `extraArgs` (string[], optional): Extra CLI arguments.\n- `timeoutMs` (integer, optional): Command timeout in milliseconds.\n\n### `run_kics`\n\nRun kics IaC scanning against Terraform code.\n\nInputs:\n\n- `path` (string, optional): Terraform project path to scan. Default: `.`.\n- `extraArgs` (string[], optional): Extra CLI arguments.\n- `timeoutMs` (integer, optional): Command timeout in milliseconds.\n\n### `run_infracost`\n\nRun infracost breakdown for a Terraform directory.\n\nInputs:\n\n- `path` (string, optional): Terraform project path to scan. Default: `.`.\n- `extraArgs` (string[], optional): Extra CLI arguments.\n- `timeoutMs` (integer, optional): Command timeout in milliseconds.\n\n### `fetch_terraform_best_practices`\n\nFetch Terraform best-practice guidance from curated checks and optional live summaries from terraform-best-practices.com.\n\nInputs:\n\n- `topic` (string, optional): Topic filter such as state, modules, security, or naming.\n- `liveFetch` (boolean, optional): When true, fetches and summarises live content. Default: `true`.\n\n### `fetch_provider_best_practices`\n\nFetch Terraform best-practice guidance for Azure, AWS, or GCP from curated checks and optional live provider docs summaries.\n\nInputs:\n\n- `provider` (string, required): Cloud provider (`azure`, `aws`, or `gcp`).\n- `topic` (string, optional): Focus area such as state, IAM, modules, networking, or cost.\n- `liveFetch` (boolean, optional): When true, fetches and summarises the linked provider guidance page. Default: `true`.\n\n### `fetch_terraform_registry_guidance`\n\nFetch Terraform Registry guidance for providers, resources, and modules.\n\nInputs:\n\n- `provider` (string, optional): Provider name (e.g. `aws`, `azurerm`, `google`).\n- `resource` (string, optional): Resource type used with provider (e.g. `s3_bucket`, `resource_group`).\n- `module` (string, optional): Module path in the form `namespace/name/provider`.\n- `topic` (string, optional): Topic filter for the summary output.\n- `liveFetch` (boolean, optional): When true, fetches and summarises selected Registry pages. Default: `true`.\n\n### `analyze_terraform_code`\n\nAnalyze Terraform code structure, modularity, and best practices.\n\nInputs:\n\n- `code` (string, required): Terraform code snippet to analyze (max 50,000 chars).\n- `focusArea` (string, optional): Analysis focus area (`modularity`, `variables`, `outputs`, `locals`, `general`). Default: `general`.\n\n### `analyze_terraform_performance`\n\nAnalyze Terraform runtime and performance bottlenecks and optimization opportunities.\n\nInputs:\n\n- `terraformCode` (string, required): Terraform code for performance-focused heuristics.\n- `stateSizeMb` (number, optional): State size in MB for scale-aware recommendations.\n- `workspaceCount` (integer, optional): Number of workspaces sharing the same root stack.\n- `providerRateLimitSensitive` (boolean, optional): When true, emphasise provider API throttling protections. Default: `true`.\n\n### `analyze_state_management`\n\nAssess backend state strategy and collaboration safety.\n\nInputs:\n\n- `terraformCode` (string, required): Terraform code including backend and state-related configuration.\n- `teamSize` (integer, optional): Number of engineers applying Terraform changes. Default: `6`.\n- `environmentCount` (integer, optional): Number of environments managed by the estate. Default: `2`.\n- `currentBackend` (string, optional): State backend in use (`auto`, `s3`, `azurerm`, `gcs`, `remote`, `local`, `unknown`). Default: `auto`.\n- `useWorkspaces` (boolean, optional): Whether multiple environments are managed through workspaces. Default: `false`.\n\n### `generate_cost_report`\n\nGenerate cost analysis with optimization suggestions from Infracost output.\n\nInputs:\n\n- `infracostJson` (string, required): JSON output from infracost breakdown or diff command.\n- `includeOptimizations` (boolean, optional): When true, generates cost optimization suggestions. Default: `true`.\n\n### `generate_terraform_module_docs`\n\nGenerate module documentation markdown from Terraform code.\n\nInputs:\n\n- `terraformCode` (string, required): Terraform module code to document.\n- `moduleName` (string, optional): Friendly name used in generated markdown docs. Default: `terraform-module`.\n- `includeUsageExample` (boolean, optional): Include a usage example section. Default: `true`.\n- `includeInputsOutputsTables` (boolean, optional): Render inputs and outputs as markdown tables. Default: `true`.\n\n### `recommend_terraform_modules`\n\nRecommend reusable Terraform modules from detected code patterns.\n\nInputs:\n\n- `terraformCode` (string, required): Terraform code used to infer module recommendations.\n- `provider` (string, optional): Preferred cloud provider (`aws`, `azure`, `gcp`, `any`). Default: `any`.\n- `deploymentIntent` (string, optional): Primary deployment goal (`networking`, `kubernetes`, `serverless`, `storage`, `database`, `observability`, `security`, `general`). Default: `general`.\n- `maxRecommendations` (integer, optional): Maximum recommendations to return (1--10). Default: `5`.\n\n### `suggest_terraform_architecture`\n\nSuggest architecture patterns for multi-environment and multi-region estates.\n\nInputs:\n\n- `workloadType` (string, optional): Primary workload profile (`web-api`, `data-platform`, `event-driven`, `platform-foundation`, `general`). Default: `general`.\n- `environments` (string[], optional): Target environments (`dev`, `test`, `stage`, `prod`, `sandbox`, `dr`). Default: `[\"dev\", \"prod\"]`.\n- `multiRegion` (boolean, optional): Whether workloads run across multiple regions. Default: `false`.\n- `complianceProfile` (string, optional): Compliance profile (`none`, `cis`, `pci-dss`, `hipaa`, `sox`). Default: `none`.\n- `teamSize` (integer, optional): Number of engineers operating Terraform code. Default: `6`.\n- `currentPainPoints` (string, optional): Pain points or constraints in the current architecture.\n- `includeReferenceLayout` (boolean, optional): Include a suggested repository and folder layout. Default: `true`.\n\n### `suggest_terraform_testing_strategy`\n\nRecommend CI-driven Terraform testing strategy by risk profile.\n\nInputs:\n\n- `terraformCode` (string, optional): Terraform code for complexity-aware recommendations.\n- `deploymentCriticality` (string, optional): Business impact level (`low`, `medium`, `high`, `mission-critical`). Default: `medium`.\n- `changeFrequency` (string, optional): How often infrastructure changes are introduced (`low`, `medium`, `high`). Default: `medium`.\n- `ciSystem` (string, optional): Target CI system (`github-actions`, `azure-devops`, `gitlab`, `circleci`, `jenkins`, `other`). Default: `github-actions`.\n- `includeExamplePipeline` (boolean, optional): Include an example pipeline sequence. Default: `true`.\n\n### `suggest_security_hardening`\n\nProvide security hardening recommendations from scan output.\n\nInputs:\n\n- `scanOutput` (string, required): Output from a security scanning tool (checkov, trivy, or kics).\n- `scanTool` (string, optional): Name of the scanning tool (`checkov`, `trivy`, `kics`). Default: `checkov`.\n\n### `generate_compliance_summary`\n\nCreate compliance reports from scan outputs.\n\nInputs:\n\n- `checkovOutput` (string, optional): Output from checkov scan.\n- `trivyOutput` (string, optional): Output from trivy scan.\n- `kicsOutput` (string, optional): Output from kics scan.\n- `complianceFramework` (string, optional): Compliance framework to assess against (`cis`, `pci-dss`, `hipaa`, `sox`, `general`). Default: `general`.\n\n## Prompt Cookbook\n\nUse these minimal prompts in Copilot Chat with `@tf-best-practices`. CLI tools default to the current workspace root when no `path` is provided. Adding `#file` or `#folder` context can improve chat understanding, but tool execution path is controlled by explicit tool inputs (for example, `path`).\n\n### Quick Start (Zero-Argument Prompts)\n\n```text\n@tf-best-practices run run_tflint\n@tf-best-practices run run_checkov\n@tf-best-practices run run_trivy\n@tf-best-practices run run_kics\n@tf-best-practices run run_infracost\n@tf-best-practices run fetch_terraform_best_practices\n```\n\n### CLI Analysis\n\n```text\n@tf-best-practices run run_tflint with path ./modules/network\n@tf-best-practices run run_checkov with path ./environments/prod\n@tf-best-practices run run_trivy with path .\n@tf-best-practices run run_kics with path .\n@tf-best-practices run run_infracost with path .\n```\n\n### Best Practices and Guidance\n\n```text\n@tf-best-practices run fetch_terraform_best_practices with topic modules\n@tf-best-practices run fetch_provider_best_practices with provider azure\n@tf-best-practices run fetch_terraform_registry_guidance with provider azurerm and resource resource_group\n```\n\n### Code Analysis\n\n```text\n@tf-best-practices run analyze_terraform_code with code <paste code> and focusArea modularity\n@tf-best-practices run analyze_terraform_performance with terraformCode <paste code>\n@tf-best-practices run analyze_state_management with terraformCode <paste code>\n```\n\n### Reporting and Recommendations\n\n```text\n@tf-best-practices run generate_cost_report with infracostJson <paste json>\n@tf-best-practices run generate_terraform_module_docs with terraformCode <paste code>\n@tf-best-practices run recommend_terraform_modules with terraformCode <paste code> and provider azure\n@tf-best-practices run suggest_terraform_architecture with workloadType web-api and environments [\"dev\",\"stage\",\"prod\"]\n@tf-best-practices run suggest_terraform_testing_strategy with ciSystem github-actions\n@tf-best-practices run suggest_security_hardening with scanOutput <paste output> and scanTool checkov\n@tf-best-practices run generate_compliance_summary with complianceFramework cis\n```\n\n## Dependencies\n\n### System Dependencies\n\n- Node.js `>=24.14.0`\n- npm (bundled with Node.js)\n- Optional CLIs available on `PATH` for command tools:\n  - `tflint`\n  - `checkov`\n  - `trivy`\n  - `kics`\n  - `infracost`\n\nIf a CLI is missing, the server returns installation guidance instead of failing silently.\n\n### npm Dependencies\n\nRuntime:\n\n- `@modelcontextprotocol/sdk` (MCP server SDK)\n- `zod` (input schema validation)\n\nDevelopment:\n\n- `typescript` (build/compile)\n- `tsx` (development runner)\n- `vitest` (unit test runner)\n- `@types/node` (Node.js typings)\n\n### Environment Variables\n\n- `INFRACOST_API_KEY`: Infracost API key for cloud-backed cost estimates.\n\n## Installation\n\n```bash\nnpm install\nnpm run build\n```\n\n## Configuration\n\n### Usage with VS Code Copilot Chat\n\nThis workspace is preconfigured in `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"tf-best-practices\": {\n      \"type\": \"stdio\",\n      \"command\": \"npm\",\n      \"args\": [\"run\", \"dev\"]\n    }\n  }\n}\n```\n\nReload VS Code (`Cmd+Shift+P` -> `Developer: Reload Window`) after changing MCP configuration.\n\nThen query the server from Copilot Chat with `@tf-best-practices`, for example:\n\n```text\n@tf-best-practices run run_tflint\n@tf-best-practices run fetch_terraform_best_practices with topic modules\n```\n\n### Usage with Other MCP Clients\n\nUse stdio transport with the built entrypoint:\n\n```json\n{\n  \"name\": \"terraform-best-practices-mcp-server\",\n  \"type\": \"stdio\",\n  \"command\": \"node\",\n  \"args\": [\"/absolute/path/to/terraform-best-practices-mcp/dist/index.js\"]\n}\n```\n\nBuild first with `npm run build`, then start your MCP client.\n\n## Running\n\n```bash\nnpm start\n```\n\nDevelopment mode:\n\n```bash\nnpm run dev\n```\n\n## Debugging\n\nUse `.vscode/launch.json`:\n\n- `Debug MCP Server` (runs `npm run dev`)\n- `Debug MCP Server (Built)` (runs `dist/index.js` after build)\n\nSet breakpoints in `src/index.ts`, then press `F5`.\n\n## Testing\n\nSee [docs/TESTING.md](./docs/TESTING.md) for Copilot Chat scenarios, manual JSON-RPC checks, and troubleshooting guidance.\n\nQuick validation prompt in Copilot Chat:\n\n```text\n@tf-best-practices run run_tflint\n```\n\n## Interactive VS Code Workflows\n\n### 1. Security Triage\n\n1. Run a scan:\n\n```text\n@tf-best-practices run run_checkov\n```\n\n1. Request hardening suggestions:\n\n```text\n@tf-best-practices run suggest_security_hardening with scanOutput <paste checkov output> and scanTool checkov\n```\n\n1. Generate a compliance summary:\n\n```text\n@tf-best-practices run generate_compliance_summary with checkovOutput <paste output> and complianceFramework cis\n```\n\n### 2. Cost Impact Review\n\n1. Generate a cost baseline:\n\n```text\n@tf-best-practices run run_infracost\n```\n\n1. Produce a cost report:\n\n```text\n@tf-best-practices run generate_cost_report with infracostJson <paste json>\n```\n\n### 3. Architecture Review\n\n1. Analyse code quality:\n\n```text\n@tf-best-practices run analyze_terraform_code with code <paste code> and focusArea modularity\n```\n\n1. Review state management:\n\n```text\n@tf-best-practices run analyze_state_management with terraformCode <paste code>\n```\n\n1. Get architecture recommendations:\n\n```text\n@tf-best-practices run suggest_terraform_architecture with workloadType web-api and multiRegion true\n```\n\n### Best Practices\n\n- Start with CLI analysis tools to establish a baseline before using guidance tools.\n- Use `fetch_terraform_best_practices` to align with community conventions.\n- Use `fetch_provider_best_practices` for provider-specific patterns.\n- Keep `timeoutMs` high enough for large Terraform projects.\n- Run `suggest_terraform_testing_strategy` when onboarding new CI/CD pipelines.\n- Use `generate_compliance_summary` regularly for audit readiness.\n\n## Additional Use Cases\n\n- Pre-merge security and compliance gates in pull requests.\n- Automated cost impact reviews for infrastructure changes.\n- Architecture pattern recommendations for greenfield projects.\n- Module documentation generation for shared Terraform modules.\n- CI-driven testing strategy definition by deployment risk profile.\n- Compliance evidence generation for audit trails.\n\n## Related Projects\n\n### Terraform Resources\n\n- [terraform-best-practices.com](https://www.terraform-best-practices.com/)\n- [Terraform Registry](https://registry.terraform.io/)\n- [tflint](https://github.com/terraform-linters/tflint)\n- [checkov](https://www.checkov.io/)\n- [trivy](https://github.com/aquasecurity/trivy)\n- [kics](https://kics.io/)\n- [Infracost](https://www.infracost.io/)\n\n### Model Context Protocol\n\n- [MCP official documentation](https://modelcontextprotocol.io/)\n- [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)\n- [MCP servers registry](https://github.com/mcp)\n\n## Community and Contributing\n\n- [Contributing Guide](./CONTRIBUTING.md)\n- [Code of Conduct](./CODE_OF_CONDUCT.md)\n- [Security Policy](./SECURITY.md)\n- [Testing Guide](./docs/TESTING.md)\n- [Maintainer Guide](./docs/MAINTAINERS.md)\n\n## Attribution and License\n\nMaintained by Carl Dawson under the [Down At The Bottom Of The Mole Hole](https://github.com/downatthebottomofthemolehole) organization.\n\n## Development\n\n```bash\nnpm run lint\nnpm test\nnpm run build\n```\n\n## License\n\nLicensed under the MIT License.\n","readmeFilename":"README.md"}