opencode-skills-collection 4.0.68 → 4.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +266 -1
  2. package/bundled-skills/access-review/SKILL.md +394 -0
  3. package/bundled-skills/access-review/references/details.md +121 -0
  4. package/bundled-skills/agent-evals/SKILL.md +420 -0
  5. package/bundled-skills/agent-observability/SKILL.md +346 -0
  6. package/bundled-skills/agent-observability/references/details.md +786 -0
  7. package/bundled-skills/ai-agent-security/SKILL.md +393 -0
  8. package/bundled-skills/ai-agent-security/references/details.md +912 -0
  9. package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
  10. package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
  11. package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
  12. package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
  13. package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
  14. package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
  15. package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
  16. package/bundled-skills/alerting-oncall/SKILL.md +458 -0
  17. package/bundled-skills/alerting-oncall/references/details.md +84 -0
  18. package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
  19. package/bundled-skills/argocd-gitops/SKILL.md +469 -0
  20. package/bundled-skills/arm-templates/SKILL.md +438 -0
  21. package/bundled-skills/arm-templates/references/details.md +64 -0
  22. package/bundled-skills/asset-inventory/SKILL.md +412 -0
  23. package/bundled-skills/asset-inventory/references/details.md +127 -0
  24. package/bundled-skills/audit-logging/SKILL.md +476 -0
  25. package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
  26. package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
  27. package/bundled-skills/aws-ec2/SKILL.md +426 -0
  28. package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
  29. package/bundled-skills/aws-iam/SKILL.md +463 -0
  30. package/bundled-skills/aws-lambda/SKILL.md +428 -0
  31. package/bundled-skills/aws-rds/SKILL.md +380 -0
  32. package/bundled-skills/aws-s3/SKILL.md +434 -0
  33. package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
  34. package/bundled-skills/aws-vpc/SKILL.md +436 -0
  35. package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
  36. package/bundled-skills/azure-aks/SKILL.md +423 -0
  37. package/bundled-skills/azure-devops/SKILL.md +457 -0
  38. package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
  39. package/bundled-skills/azure-keyvault/SKILL.md +455 -0
  40. package/bundled-skills/azure-keyvault/references/details.md +83 -0
  41. package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
  42. package/bundled-skills/azure-networking/SKILL.md +448 -0
  43. package/bundled-skills/azure-networking/references/details.md +135 -0
  44. package/bundled-skills/azure-sql/SKILL.md +413 -0
  45. package/bundled-skills/azure-sql/references/details.md +113 -0
  46. package/bundled-skills/azure-vms/SKILL.md +402 -0
  47. package/bundled-skills/azure-vms/references/details.md +134 -0
  48. package/bundled-skills/backup-recovery/SKILL.md +388 -0
  49. package/bundled-skills/bb-methodology/SKILL.md +451 -0
  50. package/bundled-skills/bb-methodology/references/details.md +120 -0
  51. package/bundled-skills/block-storage/SKILL.md +371 -0
  52. package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
  53. package/bundled-skills/blue-green-deploy/references/details.md +90 -0
  54. package/bundled-skills/bug-bounty/SKILL.md +447 -0
  55. package/bundled-skills/bug-bounty/references/details.md +1316 -0
  56. package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
  57. package/bundled-skills/business-continuity/SKILL.md +463 -0
  58. package/bundled-skills/career-ops/SKILL.md +186 -0
  59. package/bundled-skills/cdn-setup/SKILL.md +374 -0
  60. package/bundled-skills/change-management/SKILL.md +438 -0
  61. package/bundled-skills/change-management/references/details.md +105 -0
  62. package/bundled-skills/circleci/SKILL.md +475 -0
  63. package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
  64. package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
  65. package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
  66. package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
  67. package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
  68. package/bundled-skills/cloudformation/SKILL.md +461 -0
  69. package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
  70. package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
  71. package/bundled-skills/container-hardening/SKILL.md +126 -0
  72. package/bundled-skills/container-registries/SKILL.md +435 -0
  73. package/bundled-skills/container-scanning/SKILL.md +416 -0
  74. package/bundled-skills/convex-backend/SKILL.md +338 -0
  75. package/bundled-skills/dast-scanning/SKILL.md +437 -0
  76. package/bundled-skills/database-backups/SKILL.md +425 -0
  77. package/bundled-skills/datadog/SKILL.md +487 -0
  78. package/bundled-skills/dependency-scanning/SKILL.md +457 -0
  79. package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
  80. package/bundled-skills/disaster-recovery/SKILL.md +374 -0
  81. package/bundled-skills/disaster-recovery/references/details.md +219 -0
  82. package/bundled-skills/dns-management/SKILL.md +375 -0
  83. package/bundled-skills/docker-compose/SKILL.md +482 -0
  84. package/bundled-skills/docker-management/SKILL.md +426 -0
  85. package/bundled-skills/ebpf-observability/SKILL.md +436 -0
  86. package/bundled-skills/ebpf-observability/references/details.md +542 -0
  87. package/bundled-skills/elk-stack/SKILL.md +487 -0
  88. package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
  89. package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
  90. package/bundled-skills/feature-flags/SKILL.md +426 -0
  91. package/bundled-skills/feature-flags/references/details.md +86 -0
  92. package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
  93. package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
  94. package/bundled-skills/firewall-config/SKILL.md +479 -0
  95. package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
  96. package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
  97. package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
  98. package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
  99. package/bundled-skills/gcp-compute/SKILL.md +319 -0
  100. package/bundled-skills/gcp-gke/SKILL.md +307 -0
  101. package/bundled-skills/gcp-networking/SKILL.md +293 -0
  102. package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
  103. package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
  104. package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
  105. package/bundled-skills/gdpr-compliance/references/details.md +145 -0
  106. package/bundled-skills/geo-audit/SKILL.md +368 -0
  107. package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
  108. package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
  109. package/bundled-skills/geo-citability/SKILL.md +350 -0
  110. package/bundled-skills/geo-compare/SKILL.md +340 -0
  111. package/bundled-skills/geo-content/SKILL.md +383 -0
  112. package/bundled-skills/geo-crawlers/SKILL.md +408 -0
  113. package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
  114. package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
  115. package/bundled-skills/geo-proposal/SKILL.md +378 -0
  116. package/bundled-skills/geo-prospect/SKILL.md +225 -0
  117. package/bundled-skills/geo-report/SKILL.md +436 -0
  118. package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
  119. package/bundled-skills/geo-schema/SKILL.md +408 -0
  120. package/bundled-skills/geo-technical/SKILL.md +78 -0
  121. package/bundled-skills/geo-technical/references/details.md +543 -0
  122. package/bundled-skills/git-workflow/SKILL.md +460 -0
  123. package/bundled-skills/github-actions/SKILL.md +368 -0
  124. package/bundled-skills/gitlab-ci/SKILL.md +340 -0
  125. package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
  126. package/bundled-skills/gpu-server-management/SKILL.md +236 -0
  127. package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
  128. package/bundled-skills/helm-charts/SKILL.md +469 -0
  129. package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
  130. package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
  131. package/bundled-skills/hunt-ato/SKILL.md +184 -0
  132. package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
  133. package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
  134. package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
  135. package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
  136. package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
  137. package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
  138. package/bundled-skills/hunt-cicd/SKILL.md +311 -0
  139. package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
  140. package/bundled-skills/hunt-cors/SKILL.md +335 -0
  141. package/bundled-skills/hunt-dom/SKILL.md +323 -0
  142. package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
  143. package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
  144. package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
  145. package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
  146. package/bundled-skills/hunt-grpc/SKILL.md +317 -0
  147. package/bundled-skills/hunt-host-header/SKILL.md +309 -0
  148. package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
  149. package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
  150. package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
  151. package/bundled-skills/hunt-idor/SKILL.md +434 -0
  152. package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
  153. package/bundled-skills/hunt-k8s/SKILL.md +337 -0
  154. package/bundled-skills/hunt-laravel/SKILL.md +255 -0
  155. package/bundled-skills/hunt-ldap/SKILL.md +351 -0
  156. package/bundled-skills/hunt-lfi/SKILL.md +311 -0
  157. package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
  158. package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
  159. package/bundled-skills/hunt-misc/SKILL.md +378 -0
  160. package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
  161. package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
  162. package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
  163. package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
  164. package/bundled-skills/hunt-oauth/SKILL.md +459 -0
  165. package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
  166. package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
  167. package/bundled-skills/hunt-race-condition/references/details.md +159 -0
  168. package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
  169. package/bundled-skills/hunt-rce/SKILL.md +444 -0
  170. package/bundled-skills/hunt-rce/references/details.md +110 -0
  171. package/bundled-skills/hunt-saml/SKILL.md +156 -0
  172. package/bundled-skills/hunt-session/SKILL.md +342 -0
  173. package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
  174. package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
  175. package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
  176. package/bundled-skills/hunt-springboot/SKILL.md +285 -0
  177. package/bundled-skills/hunt-sqli/SKILL.md +466 -0
  178. package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
  179. package/bundled-skills/hunt-ssrf/references/details.md +179 -0
  180. package/bundled-skills/hunt-ssti/SKILL.md +163 -0
  181. package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
  182. package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
  183. package/bundled-skills/hunt-xxe/SKILL.md +466 -0
  184. package/bundled-skills/i-have-adhd/SKILL.md +170 -0
  185. package/bundled-skills/identity-access-management/SKILL.md +382 -0
  186. package/bundled-skills/identity-access-management/references/details.md +524 -0
  187. package/bundled-skills/incident-management/SKILL.md +484 -0
  188. package/bundled-skills/incident-response/SKILL.md +448 -0
  189. package/bundled-skills/incident-response/references/details.md +113 -0
  190. package/bundled-skills/interview-me/SKILL.md +248 -0
  191. package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
  192. package/bundled-skills/jenkins/SKILL.md +462 -0
  193. package/bundled-skills/jev-use/SKILL.md +158 -0
  194. package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
  195. package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
  196. package/bundled-skills/kubernetes-ops/references/details.md +108 -0
  197. package/bundled-skills/kustomize/SKILL.md +478 -0
  198. package/bundled-skills/linux-administration/SKILL.md +367 -0
  199. package/bundled-skills/linux-hardening/SKILL.md +154 -0
  200. package/bundled-skills/llm-app-security/SKILL.md +389 -0
  201. package/bundled-skills/llm-app-security/references/details.md +674 -0
  202. package/bundled-skills/llm-caching/SKILL.md +334 -0
  203. package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
  204. package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
  205. package/bundled-skills/llm-gateway/SKILL.md +282 -0
  206. package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
  207. package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
  208. package/bundled-skills/load-balancing/SKILL.md +403 -0
  209. package/bundled-skills/loki-logging/SKILL.md +479 -0
  210. package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
  211. package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
  212. package/bundled-skills/mcp-server-security/SKILL.md +356 -0
  213. package/bundled-skills/mcp-server-security/references/details.md +745 -0
  214. package/bundled-skills/mdm-device-management/SKILL.md +404 -0
  215. package/bundled-skills/mdm-device-management/references/details.md +410 -0
  216. package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
  217. package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
  218. package/bundled-skills/model-registry-governance/SKILL.md +452 -0
  219. package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
  220. package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
  221. package/bundled-skills/mongodb/SKILL.md +436 -0
  222. package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
  223. package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
  224. package/bundled-skills/mysql/SKILL.md +390 -0
  225. package/bundled-skills/new-relic/SKILL.md +472 -0
  226. package/bundled-skills/nfs-storage/SKILL.md +356 -0
  227. package/bundled-skills/object-storage/SKILL.md +378 -0
  228. package/bundled-skills/offensive-osint/SKILL.md +443 -0
  229. package/bundled-skills/okta-attack/SKILL.md +436 -0
  230. package/bundled-skills/ollama-stack/SKILL.md +379 -0
  231. package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
  232. package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
  233. package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
  234. package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
  235. package/bundled-skills/openshift/SKILL.md +485 -0
  236. package/bundled-skills/opentelemetry/SKILL.md +438 -0
  237. package/bundled-skills/opentelemetry/references/details.md +78 -0
  238. package/bundled-skills/opentofu-migration/SKILL.md +349 -0
  239. package/bundled-skills/osint-methodology/SKILL.md +460 -0
  240. package/bundled-skills/osint-methodology/references/details.md +1350 -0
  241. package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
  242. package/bundled-skills/penetration-testing/SKILL.md +152 -0
  243. package/bundled-skills/performance-tuning/SKILL.md +381 -0
  244. package/bundled-skills/planetscale/SKILL.md +297 -0
  245. package/bundled-skills/platform-engineering/SKILL.md +348 -0
  246. package/bundled-skills/platform-engineering/references/details.md +944 -0
  247. package/bundled-skills/podman/SKILL.md +405 -0
  248. package/bundled-skills/policy-as-code/SKILL.md +434 -0
  249. package/bundled-skills/policy-as-code/references/details.md +204 -0
  250. package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
  251. package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
  252. package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
  253. package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
  254. package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
  255. package/bundled-skills/rag-observability-evals/references/details.md +92 -0
  256. package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
  257. package/bundled-skills/redis/SKILL.md +421 -0
  258. package/bundled-skills/redteam-report-template/SKILL.md +370 -0
  259. package/bundled-skills/report-writing/SKILL.md +426 -0
  260. package/bundled-skills/report-writing/references/details.md +187 -0
  261. package/bundled-skills/reverse-proxy/SKILL.md +420 -0
  262. package/bundled-skills/runbook-creation/SKILL.md +438 -0
  263. package/bundled-skills/runbook-creation/references/details.md +71 -0
  264. package/bundled-skills/saas-security-posture/SKILL.md +415 -0
  265. package/bundled-skills/sast-scanning/SKILL.md +444 -0
  266. package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
  267. package/bundled-skills/security-arsenal/SKILL.md +446 -0
  268. package/bundled-skills/security-arsenal/references/details.md +540 -0
  269. package/bundled-skills/security-automation/SKILL.md +146 -0
  270. package/bundled-skills/semantic-versioning/SKILL.md +434 -0
  271. package/bundled-skills/semantic-versioning/references/details.md +83 -0
  272. package/bundled-skills/service-mesh/SKILL.md +422 -0
  273. package/bundled-skills/soc2-compliance/SKILL.md +409 -0
  274. package/bundled-skills/sops-encryption/SKILL.md +124 -0
  275. package/bundled-skills/sre-dashboards/SKILL.md +143 -0
  276. package/bundled-skills/ssh-configuration/SKILL.md +324 -0
  277. package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
  278. package/bundled-skills/ssl-tls-management/references/details.md +99 -0
  279. package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
  280. package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
  281. package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
  282. package/bundled-skills/systemd-services/SKILL.md +379 -0
  283. package/bundled-skills/terraform-aws/SKILL.md +125 -0
  284. package/bundled-skills/terraform-azure/SKILL.md +415 -0
  285. package/bundled-skills/terraform-azure/references/details.md +231 -0
  286. package/bundled-skills/terraform-gcp/SKILL.md +369 -0
  287. package/bundled-skills/threat-modeling/SKILL.md +487 -0
  288. package/bundled-skills/user-management/SKILL.md +383 -0
  289. package/bundled-skills/using-agent-skills/SKILL.md +220 -0
  290. package/bundled-skills/vector-database-ops/SKILL.md +300 -0
  291. package/bundled-skills/vendor-management/SKILL.md +439 -0
  292. package/bundled-skills/vendor-management/references/details.md +109 -0
  293. package/bundled-skills/vercel-deployments/SKILL.md +296 -0
  294. package/bundled-skills/vllm-server/SKILL.md +236 -0
  295. package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
  296. package/bundled-skills/vpn-setup/SKILL.md +452 -0
  297. package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
  298. package/bundled-skills/waf-setup/SKILL.md +354 -0
  299. package/bundled-skills/waf-setup/references/details.md +211 -0
  300. package/bundled-skills/web2-recon/SKILL.md +440 -0
  301. package/bundled-skills/web2-recon/references/details.md +319 -0
  302. package/bundled-skills/web3-audit/SKILL.md +445 -0
  303. package/bundled-skills/web3-audit/references/details.md +224 -0
  304. package/bundled-skills/windows-hardening/SKILL.md +454 -0
  305. package/bundled-skills/windows-hardening/references/details.md +204 -0
  306. package/bundled-skills/windows-server/SKILL.md +318 -0
  307. package/bundled-skills/zero-trust/SKILL.md +461 -0
  308. package/package.json +1 -1
  309. package/skills_index.json +6943 -323
@@ -0,0 +1,350 @@
1
+ ---
2
+ name: mac-mini-llm-lab
3
+ description: Configure a Mac mini as a reliable local LLM server with remote access,
4
+ observability, and power-safe operation. Use when building an always-on private
5
+ AI inference server on Apple Silicon.
6
+ category: devops
7
+ risk: critical
8
+ source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
9
+ source_repo: BagelHole/DevOps-Security-Agent-Skills
10
+ source_type: community
11
+ date_added: '2026-09-20'
12
+ license: MIT
13
+ license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
14
+ compatibility: Requires the relevant OS/platform tooling and privileged access where
15
+ noted. Docs-only; helper scripts and templates not bundled.
16
+ metadata:
17
+ author: devops-skills
18
+ version: '1.0'
19
+ ---
20
+
21
+ # Mac mini LLM Lab
22
+
23
+ Turn a Mac mini into a low-noise, always-on local AI appliance.
24
+
25
+ ## When to Use This Skill
26
+
27
+ Use this skill when:
28
+ - Setting up a dedicated local LLM inference server
29
+ - Building a private AI development environment
30
+ - Need always-on model serving without cloud costs
31
+ - Running models that require Apple Silicon unified memory (32-192GB)
32
+ - Creating a home lab AI server for a small team
33
+
34
+ ## Prerequisites
35
+
36
+ - Mac mini with Apple Silicon (M2/M3/M4, 16GB+ unified memory recommended)
37
+ - macOS Sonoma 14+ or Sequoia 15+
38
+ - Ethernet connection (recommended over Wi-Fi)
39
+ - UPS for power protection (optional but recommended)
40
+
41
+ ## Initial System Setup
42
+
43
+ ```bash
44
+ # Update macOS
45
+ softwareupdate --install --all
46
+
47
+ # Install Xcode command-line tools
48
+ xcode-select --install
49
+
50
+ # Install Homebrew
51
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
52
+
53
+ # Core packages
54
+ brew install tmux htop btop wget jq git neovim
55
+
56
+ # Python environment (for MLX and custom scripts)
57
+ brew install python@3.12 uv
58
+
59
+ # Monitoring
60
+ brew install prometheus node_exporter
61
+ ```
62
+
63
+ ## Ollama Setup
64
+
65
+ ```bash
66
+ # Install Ollama
67
+ brew install ollama
68
+
69
+ # Pull models based on your RAM
70
+ # 16GB Mac mini:
71
+ ollama pull llama3.1:8b
72
+ ollama pull nomic-embed-text
73
+ ollama pull codellama:7b
74
+
75
+ # 32GB Mac mini:
76
+ ollama pull llama3.1:8b
77
+ ollama pull qwen2.5:14b
78
+ ollama pull deepseek-coder-v2:16b
79
+ ollama pull nomic-embed-text
80
+
81
+ # 64GB+ Mac mini:
82
+ ollama pull llama3.1:70b
83
+ ollama pull qwen2.5:32b
84
+ ollama pull codellama:34b
85
+
86
+ # Verify Metal acceleration
87
+ ollama run llama3.1:8b --verbose
88
+ # Look for: "metal" in output
89
+ ```
90
+
91
+ ## MLX Framework (Apple Silicon Native)
92
+
93
+ MLX runs models natively on Apple Silicon with excellent performance:
94
+
95
+ ```bash
96
+ # Install MLX
97
+ uv pip install mlx mlx-lm
98
+
99
+ # Run a model
100
+ python3 -c "
101
+ from mlx_lm import load, generate
102
+ model, tokenizer = load('mlx-community/Llama-3.1-8B-Instruct-4bit')
103
+ response = generate(model, tokenizer, prompt='Explain Docker in 3 sentences', max_tokens=200)
104
+ print(response)
105
+ "
106
+
107
+ # MLX server (OpenAI-compatible API)
108
+ uv pip install mlx-lm[server]
109
+ mlx_lm.server --model mlx-community/Llama-3.1-8B-Instruct-4bit --port 8080
110
+ ```
111
+
112
+ ## Auto-Start with launchd
113
+
114
+ ```xml
115
+ <!-- ~/Library/LaunchAgents/com.ollama.serve.plist -->
116
+ <?xml version="1.0" encoding="UTF-8"?>
117
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
118
+ <plist version="1.0">
119
+ <dict>
120
+ <key>Label</key>
121
+ <string>com.ollama.serve</string>
122
+ <key>ProgramArguments</key>
123
+ <array>
124
+ <string>/opt/homebrew/bin/ollama</string>
125
+ <string>serve</string>
126
+ </array>
127
+ <key>EnvironmentVariables</key>
128
+ <dict>
129
+ <key>OLLAMA_HOST</key>
130
+ <string>0.0.0.0</string>
131
+ <key>OLLAMA_NUM_PARALLEL</key>
132
+ <string>4</string>
133
+ <key>OLLAMA_MAX_LOADED_MODELS</key>
134
+ <string>2</string>
135
+ <key>OLLAMA_FLASH_ATTENTION</key>
136
+ <string>1</string>
137
+ </dict>
138
+ <key>RunAtLoad</key>
139
+ <true/>
140
+ <key>KeepAlive</key>
141
+ <true/>
142
+ <key>StandardOutPath</key>
143
+ <string>/tmp/ollama.log</string>
144
+ <key>StandardErrorPath</key>
145
+ <string>/tmp/ollama.err</string>
146
+ </dict>
147
+ </plist>
148
+ ```
149
+
150
+ ```bash
151
+ # Load the service
152
+ launchctl load ~/Library/LaunchAgents/com.ollama.serve.plist
153
+
154
+ # Check status
155
+ launchctl list | grep ollama
156
+
157
+ # Unload if needed
158
+ launchctl unload ~/Library/LaunchAgents/com.ollama.serve.plist
159
+ ```
160
+
161
+ ## Power & Reliability
162
+
163
+ ```bash
164
+ # Prevent sleep (keeps running with lid closed on Mac mini)
165
+ sudo pmset -a disablesleep 1
166
+ sudo pmset -a sleep 0
167
+
168
+ # Auto-restart after power failure
169
+ sudo pmset -a autorestart 1
170
+
171
+ # Schedule weekly reboot (Sunday 4 AM)
172
+ sudo pmset repeat shutdown MTWRFSU 03:55:00
173
+ sudo pmset repeat poweron MTWRFSU 04:00:00
174
+
175
+ # Check power settings
176
+ pmset -g
177
+ ```
178
+
179
+ ## Remote Access
180
+
181
+ ### Tailscale (Recommended)
182
+
183
+ ```bash
184
+ # Install Tailscale for easy secure remote access
185
+ brew install --cask tailscale
186
+
187
+ # Enable from menu bar, authenticate
188
+ # Access your Mac mini from anywhere: http://mac-mini:11434
189
+ ```
190
+
191
+ ### SSH Hardening
192
+
193
+ ```bash
194
+ # Enable remote login
195
+ sudo systemsetup -setremotelogin on
196
+
197
+ # Edit SSH config
198
+ sudo nano /etc/ssh/sshd_config
199
+ # Add:
200
+ # PasswordAuthentication no
201
+ # PubkeyAuthentication yes
202
+ # PermitRootLogin no
203
+ # AllowUsers yourusername
204
+
205
+ # Restart SSH
206
+ sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
207
+ sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
208
+ ```
209
+
210
+ ### Reverse Proxy with Caddy
211
+
212
+ ```bash
213
+ brew install caddy
214
+
215
+ # Caddyfile
216
+ cat > /opt/homebrew/etc/Caddyfile << 'EOF'
217
+ llm.local:443 {
218
+ tls internal
219
+ reverse_proxy localhost:11434
220
+
221
+ @api path /v1/*
222
+ handle @api {
223
+ reverse_proxy localhost:11434
224
+ }
225
+ }
226
+
227
+ webui.local:443 {
228
+ tls internal
229
+ reverse_proxy localhost:3000
230
+ }
231
+ EOF
232
+
233
+ brew services start caddy
234
+ ```
235
+
236
+ ## Open WebUI Setup
237
+
238
+ ```bash
239
+ # Run Open WebUI via Docker
240
+ docker run -d \
241
+ --name open-webui \
242
+ -p 3000:8080 \
243
+ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
244
+ -e WEBUI_AUTH=true \
245
+ -v open-webui:/app/backend/data \
246
+ --restart unless-stopped \
247
+ ghcr.io/open-webui/open-webui:main
248
+
249
+ # Or install Docker first if not available
250
+ brew install --cask docker
251
+ ```
252
+
253
+ ## Monitoring
254
+
255
+ ```bash
256
+ # Health check script
257
+ cat > ~/scripts/llm-health.sh << 'SCRIPT'
258
+ #!/bin/bash
259
+ # Check Ollama
260
+ if curl -sf http://localhost:11434/api/tags > /dev/null; then
261
+ echo "$(date): Ollama OK"
262
+ curl -s http://localhost:11434/api/ps | python3 -m json.tool
263
+ else
264
+ echo "$(date): Ollama DOWN"
265
+ # Restart
266
+ launchctl kickstart -k gui/$(id -u)/com.ollama.serve
267
+ fi
268
+
269
+ # System stats
270
+ echo "CPU: $(top -l 1 -n 0 | grep 'CPU usage')"
271
+ echo "Memory: $(vm_stat | head -5)"
272
+ echo "Disk: $(df -h / | tail -1)"
273
+ echo "Thermal: $(sudo powermetrics --samplers smc -n 1 2>/dev/null | grep 'CPU die' || echo 'N/A')"
274
+ SCRIPT
275
+ chmod +x ~/scripts/llm-health.sh
276
+
277
+ # Schedule health check every 5 minutes
278
+ # Add to crontab: crontab -e
279
+ # */5 * * * * ~/scripts/llm-health.sh >> ~/logs/llm-health.log 2>&1
280
+ ```
281
+
282
+ ### Memory Usage by Model
283
+
284
+ | Model | RAM Required | Tokens/sec (M2) | Tokens/sec (M4) |
285
+ |-------|-------------|-----------------|-----------------|
286
+ | llama3.1:8b (Q4) | ~5 GB | ~25 t/s | ~45 t/s |
287
+ | qwen2.5:14b (Q4) | ~9 GB | ~15 t/s | ~30 t/s |
288
+ | llama3.1:70b (Q4) | ~40 GB | ~5 t/s | ~10 t/s |
289
+ | nomic-embed-text | ~300 MB | N/A | N/A |
290
+ | codellama:13b | ~8 GB | ~18 t/s | ~35 t/s |
291
+
292
+ ## Security Checklist
293
+
294
+ ```bash
295
+ # Enable FileVault disk encryption
296
+ sudo fdesetup enable
297
+
298
+ # Enable firewall
299
+ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
300
+ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
301
+
302
+ # Disable unnecessary sharing services
303
+ sudo launchctl disable system/com.apple.screensharing
304
+ sudo launchctl disable system/com.apple.AirPlayXPCHelper
305
+
306
+ # Set strong admin password
307
+ # System Settings > Users & Groups
308
+
309
+ # Restrict Ollama to local network only (if not using Tailscale)
310
+ # Set OLLAMA_HOST=127.0.0.1 in launchd plist
311
+ ```
312
+
313
+ ## Performance Tuning
314
+
315
+ ```bash
316
+ # Increase file descriptor limits for concurrent requests
317
+ sudo launchctl limit maxfiles 65536 200000
318
+
319
+ # Check unified memory pressure
320
+ memory_pressure
321
+
322
+ # Monitor GPU usage (Metal)
323
+ sudo powermetrics --samplers gpu_power -n 1
324
+
325
+ # Optimize for inference (disable Spotlight indexing on model dirs)
326
+ mdutil -i off ~/.ollama
327
+ ```
328
+
329
+ ## Troubleshooting
330
+
331
+ | Issue | Solution |
332
+ |-------|---------|
333
+ | Model loading slow | First load caches to memory; subsequent loads are fast |
334
+ | Out of memory | Use smaller quantization (Q4_K_M), reduce `OLLAMA_MAX_LOADED_MODELS` |
335
+ | Mac sleeping | Run `sudo pmset -a disablesleep 1` |
336
+ | Ollama not starting | Check `launchctl list | grep ollama`, view `/tmp/ollama.err` |
337
+ | Slow over Wi-Fi | Use Ethernet; Wi-Fi adds latency to streaming responses |
338
+ | Thermal throttling | Ensure adequate ventilation, check `powermetrics` |
339
+
340
+ ## Related Skills
341
+
342
+ - ollama-stack (`ollama-stack`) — Software stack with Docker Compose and LiteLLM
343
+ - ssh-configuration (`ssh-configuration`) — Secure remote access
344
+ - vpn-setup (`vpn-setup`) — Remote access via WireGuard/Tailscale
345
+
346
+ ## Limitations
347
+
348
+ - Infrastructure commands can disrupt services: confirm target host/scope and have backups/snapshots before mutating state.
349
+ - Docs-only import: upstream scripts and templates not bundled.
350
+
@@ -0,0 +1,356 @@
1
+ ---
2
+ name: mcp-server-security
3
+ description: Secure Model Context Protocol (MCP) servers with transport encryption,
4
+ tool authorization, input validation, and audit logging for safe AI agent integrations.
5
+ category: security
6
+ risk: safe
7
+ source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
8
+ source_repo: BagelHole/DevOps-Security-Agent-Skills
9
+ source_type: community
10
+ date_added: '2026-09-20'
11
+ license: MIT
12
+ license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
13
+ compatibility: Requires the relevant security tooling (scanners, vault CLIs) and an
14
+ authorized scope for any active assessment. Docs-only; helper scripts and templates
15
+ not bundled.
16
+ metadata:
17
+ author: devops-skills
18
+ version: '1.0'
19
+ ---
20
+
21
+ # MCP Server Security
22
+
23
+ Comprehensive hardening guide for Model Context Protocol (MCP) servers. MCP is the open
24
+ standard for connecting AI agents to external tools, data sources, and services. Because
25
+ MCP servers execute real actions on real infrastructure, they are a high-value attack
26
+ surface. This skill covers every layer of defense you need before exposing an MCP server
27
+ to agents in production.
28
+
29
+ ---
30
+
31
+ ## 2. MCP Threat Model
32
+
33
+ Before hardening, understand what you are defending against.
34
+
35
+ | Threat | Vector | Impact |
36
+ |-------------------------------|---------------------------------------------------------------|-------------------------------------|
37
+ | Unauthorized tool access | Agent calls tools the user should not have access to | Privilege escalation, data breach |
38
+ | Prompt injection via resources| Malicious content in MCP resources influences agent behavior | Arbitrary tool execution |
39
+ | Data exfiltration via results | Tool results leak sensitive data back to an untrusted agent | Data loss, compliance violation |
40
+ | SSRF via MCP tools | Agent tricks a tool into making internal network requests | Internal service compromise |
41
+ | Credential theft | API keys or tokens stored insecurely on the MCP server | Full account takeover |
42
+ | Denial of service | Agent floods server with tool calls or huge payloads | Service unavailability |
43
+ | Man-in-the-middle | Unencrypted transport between agent and MCP server | Eavesdropping, request tampering |
44
+ | Supply chain compromise | Malicious MCP server package or plugin | Arbitrary code execution |
45
+
46
+ ---
47
+
48
+ ## 3. Transport Security
49
+
50
+ ### 3.1 TLS for Streamable HTTP and SSE Transports
51
+
52
+ Every MCP server exposed over HTTP must terminate TLS. Never run plain HTTP in
53
+ production.
54
+
55
+ **Nginx reverse proxy with TLS termination for an MCP server:**
56
+
57
+ ```nginx
58
+ # /etc/nginx/sites-enabled/mcp-server.conf
59
+ server {
60
+ listen 443 ssl http2;
61
+ server_name mcp.internal.example.com;
62
+
63
+ ssl_certificate /etc/ssl/certs/mcp-server.crt;
64
+ ssl_certificate_key /etc/ssl/private/mcp-server.key;
65
+ ssl_protocols TLSv1.3;
66
+ ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
67
+ ssl_prefer_server_ciphers on;
68
+ ssl_session_timeout 1d;
69
+ ssl_session_tickets off;
70
+
71
+ # HSTS header
72
+ add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
73
+
74
+ location / {
75
+ proxy_pass http://127.0.0.1:3001;
76
+ proxy_http_version 1.1;
77
+ proxy_set_header Upgrade $http_upgrade;
78
+ proxy_set_header Connection "upgrade";
79
+ proxy_set_header Host $host;
80
+ proxy_set_header X-Real-IP $remote_addr;
81
+ proxy_set_header X-Forwarded-Proto $scheme;
82
+
83
+ # SSE-specific: disable buffering so events stream immediately
84
+ proxy_buffering off;
85
+ proxy_cache off;
86
+ proxy_read_timeout 86400s;
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### 3.2 mTLS Between Agent and Server
92
+
93
+ For high-security environments, require the agent (client) to present a certificate.
94
+
95
+ ```nginx
96
+ # Add to the server block above
97
+ ssl_client_certificate /etc/ssl/certs/agent-ca.crt;
98
+ ssl_verify_client on;
99
+ ssl_verify_depth 2;
100
+ ```
101
+
102
+ **Generate a client certificate for an agent:**
103
+
104
+ ```bash
105
+ # Create CA (one-time)
106
+ openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
107
+ -days 365 -noenc -keyout ca-key.pem -out ca-cert.pem \
108
+ -subj "/CN=MCP Agent CA"
109
+
110
+ # Create agent client cert signed by the CA
111
+ openssl req -newkey ec -pkeyopt ec_paramgen_curve:P-256 \
112
+ -noenc -keyout agent-key.pem -out agent-csr.pem \
113
+ -subj "/CN=agent-orchestrator-01"
114
+
115
+ openssl x509 -req -in agent-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \
116
+ -CAcreateserial -out agent-cert.pem -days 90
117
+ ```
118
+
119
+ ### 3.3 Securing stdio Transport
120
+
121
+ For local stdio-based servers, the attack surface is the process boundary itself:
122
+
123
+ ```jsonc
124
+ // claude_desktop_config.json - restrict stdio server permissions
125
+ {
126
+ "mcpServers": {
127
+ "filesystem": {
128
+ "command": "npx",
129
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/safe-dir"],
130
+ "env": {
131
+ "NODE_OPTIONS": "--experimental-permission --allow-fs-read=/home/user/safe-dir --allow-fs-write=/home/user/safe-dir"
132
+ }
133
+ }
134
+ }
135
+ }
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 4. Authentication and Authorization
141
+
142
+ ### 4.1 OAuth 2.1 Integration
143
+
144
+ MCP's Streamable HTTP transport supports OAuth 2.1 for client authentication. Configure
145
+ your server to validate bearer tokens on every request.
146
+
147
+ ```typescript
148
+ // src/auth.ts - OAuth 2.1 token validation middleware for an MCP server
149
+ import { createServer } from "@modelcontextprotocol/sdk/server/index.js";
150
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
151
+ import express from "express";
152
+ import jwt from "jsonwebtoken";
153
+
154
+ const app = express();
155
+
156
+ // OAuth 2.1 token validation middleware
157
+ function validateBearerToken(req: express.Request, res: express.Response, next: express.NextFunction) {
158
+ const authHeader = req.headers.authorization;
159
+ if (!authHeader?.startsWith("Bearer ")) {
160
+ return res.status(401).json({ error: "missing_token" });
161
+ }
162
+
163
+ const token = authHeader.slice(7);
164
+ try {
165
+ const payload = jwt.verify(token, process.env.OAUTH_PUBLIC_KEY!, {
166
+ algorithms: ["RS256"],
167
+ issuer: "https://auth.example.com",
168
+ audience: "mcp-server",
169
+ });
170
+ // Attach scopes for downstream authorization
171
+ (req as any).tokenScopes = (payload as any).scope?.split(" ") || [];
172
+ (req as any).userId = (payload as any).sub;
173
+ next();
174
+ } catch {
175
+ return res.status(403).json({ error: "invalid_token" });
176
+ }
177
+ }
178
+
179
+ app.use("/mcp", validateBearerToken);
180
+ ```
181
+
182
+ ### 4.2 API Key Management
183
+
184
+ For simpler deployments, use hashed API keys stored server-side:
185
+
186
+ ```typescript
187
+ // src/apikeys.ts
188
+ import { createHash, timingSafeEqual } from "crypto";
189
+
190
+ interface ApiKeyRecord {
191
+ hashedKey: string;
192
+ userId: string;
193
+ allowedTools: string[];
194
+ rateLimit: number; // requests per minute
195
+ expiresAt: Date;
196
+ }
197
+
198
+ // Store hashed keys, never plaintext
199
+ const apiKeyStore: Map<string, ApiKeyRecord> = new Map();
200
+
201
+ export function registerApiKey(plainKey: string, record: Omit<ApiKeyRecord, "hashedKey">) {
202
+ const hashed = createHash("sha256").update(plainKey).digest("hex");
203
+ apiKeyStore.set(hashed, { ...record, hashedKey: hashed });
204
+ }
205
+
206
+ export function validateApiKey(plainKey: string): ApiKeyRecord | null {
207
+ const hashed = createHash("sha256").update(plainKey).digest("hex");
208
+ const record = apiKeyStore.get(hashed);
209
+ if (!record) return null;
210
+ if (new Date() > record.expiresAt) {
211
+ apiKeyStore.delete(hashed);
212
+ return null;
213
+ }
214
+ return record;
215
+ }
216
+ ```
217
+
218
+ ---
219
+
220
+ ## 5. Tool Authorization
221
+
222
+ ### 5.1 Allowlist Patterns
223
+
224
+ Never expose every tool to every user. Define an explicit allowlist:
225
+
226
+ ```yaml
227
+ # config/tool-policy.yaml
228
+ policies:
229
+ - role: developer
230
+ allowed_tools:
231
+ - "read_file"
232
+ - "search_code"
233
+ - "run_tests"
234
+ denied_tools:
235
+ - "execute_command"
236
+ - "write_file"
237
+ - "delete_file"
238
+
239
+ - role: admin
240
+ allowed_tools: ["*"]
241
+ denied_tools: []
242
+
243
+ - role: readonly-agent
244
+ allowed_tools:
245
+ - "read_file"
246
+ - "list_directory"
247
+ - "query_database:SELECT"
248
+ denied_tools: ["*"]
249
+
250
+ dangerous_tools:
251
+ - name: "execute_command"
252
+ risk: critical
253
+ requires_approval: true
254
+ max_executions_per_session: 5
255
+ - name: "write_file"
256
+ risk: high
257
+ requires_approval: true
258
+ - name: "query_database"
259
+ risk: medium
260
+ allowed_operations: ["SELECT"]
261
+ ```
262
+
263
+ ### 5.2 Per-User Tool Access Enforcement
264
+
265
+ ```typescript
266
+ // src/toolAuth.ts
267
+ import { readFileSync } from "fs";
268
+ import { parse } from "yaml";
269
+
270
+ interface ToolPolicy {
271
+ role: string;
272
+ allowed_tools: string[];
273
+ denied_tools: string[];
274
+ }
275
+
276
+ const config = parse(readFileSync("config/tool-policy.yaml", "utf-8"));
277
+ const policies: ToolPolicy[] = config.policies;
278
+
279
+ export function isToolAllowed(userRole: string, toolName: string): boolean {
280
+ const policy = policies.find((p) => p.role === userRole);
281
+ if (!policy) return false;
282
+
283
+ // Explicit deny takes precedence
284
+ if (policy.denied_tools.includes(toolName)) return false;
285
+ if (policy.denied_tools.includes("*") && !policy.allowed_tools.includes(toolName)) return false;
286
+
287
+ // Check allow
288
+ if (policy.allowed_tools.includes("*")) return true;
289
+ if (policy.allowed_tools.includes(toolName)) return true;
290
+
291
+ return false;
292
+ }
293
+
294
+ // MCP server integration: wrap the tool handler
295
+ export function authorizedToolHandler(server: any) {
296
+ const originalCallTool = server.callTool.bind(server);
297
+
298
+ server.callTool = async (request: any, context: any) => {
299
+ const userRole = context.session?.userRole || "readonly-agent";
300
+ const toolName = request.params.name;
301
+
302
+ if (!isToolAllowed(userRole, toolName)) {
303
+ return {
304
+ content: [{ type: "text", text: `Access denied: tool "${toolName}" is not permitted for role "${userRole}".` }],
305
+ isError: true,
306
+ };
307
+ }
308
+ return originalCallTool(request, context);
309
+ };
310
+ }
311
+ ```
312
+
313
+ ---
314
+
315
+
316
+ ## Contents
317
+
318
+ - [6. Input Validation](references/details.md)
319
+ - [7. Resource Access Control](references/details.md)
320
+ - [8. Rate Limiting](references/details.md)
321
+ - [9. Audit Logging](references/details.md)
322
+ - [10. Deployment Hardening](references/details.md)
323
+ - [11. Testing](references/details.md)
324
+ - [Quick Reference Checklist](references/details.md)
325
+
326
+ ## When to Use This Skill
327
+
328
+ Apply this skill whenever you are:
329
+
330
+ - Deploying an MCP server that exposes tools (filesystem, database, API) to AI agents.
331
+ - Connecting an agent runtime (Claude Desktop, Cursor, a custom orchestrator) to one or
332
+ more MCP servers over stdio, SSE, or Streamable HTTP transport.
333
+ - Building a multi-tenant platform where multiple users share the same MCP server.
334
+ - Passing sensitive data (PII, credentials, internal documents) through MCP resources.
335
+ - Operating in a regulated environment (SOC 2, HIPAA, PCI-DSS) where tool invocations
336
+ must be auditable.
337
+
338
+ If your MCP server only runs locally over stdio for a single developer with no network
339
+ exposure, you can relax some transport-layer controls -- but input validation and audit
340
+ logging still apply.
341
+
342
+ ---
343
+
344
+ ## Limitations
345
+
346
+ - Apply guidance only within authorized scope; test destructive steps in non-production first.
347
+ - Docs-only import: upstream scripts and templates not bundled.
348
+
349
+ ### Example
350
+
351
+ ```bash
352
+ # Read-only first: inventory before any active step.
353
+ which <tool> && <tool> --help | head -n 20
354
+ ```
355
+
356
+ > Adapted from [BagelHole/DevOps-Security-Agent-Skills](https://github.com/BagelHole/DevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.