@maestro-ai/cli 1.0.0

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 (252) hide show
  1. package/README.md +59 -0
  2. package/content/guides/Cat/303/241logo de Stacks para Cloud Moderna.md" +119 -0
  3. package/content/guides/Cat/303/241logo de Stacks para Hospedagem Compartilhada.md" +147 -0
  4. package/content/guides/Checklist Mestre de Entrega.md +68 -0
  5. package/content/guides/Gates de Qualidade.md +209 -0
  6. package/content/guides/Guia de Adi/303/247/303/243o de Novas Funcionalidades.md" +355 -0
  7. package/content/guides/Guia de Chaos Engineering.md +267 -0
  8. package/content/guides/Guia de Debugging com IA.md +135 -0
  9. package/content/guides/Guia de Estrat/303/251gias de Cache.md" +352 -0
  10. package/content/guides/Guia de Migrations Zero-Downtime.md +311 -0
  11. package/content/guides/Guia de Multi-tenancy.md +368 -0
  12. package/content/guides/Guia de Otimiza/303/247/303/243o de Custos Cloud.md" +195 -0
  13. package/content/guides/Guia de Refatora/303/247/303/243o de C/303/263digo Legado com IA.md" +162 -0
  14. package/content/guides/Guia de SLOs e Error Budgets.md +315 -0
  15. package/content/guides/M/303/251tricas de Efici/303/252ncia do Desenvolvimento com IA.md" +93 -0
  16. package/content/guides/Rules base.md +90 -0
  17. package/content/prompts/README.md +203 -0
  18. package/content/prompts/acessibilidade/analise-acessibilidade.md +257 -0
  19. package/content/prompts/apis/design-api-rest.md +303 -0
  20. package/content/prompts/apis/idempotencia.md +254 -0
  21. package/content/prompts/apis/versionamento.md +313 -0
  22. package/content/prompts/arquitetura/arquitetura-c4-completo.md +190 -0
  23. package/content/prompts/arquitetura/clean-architecture.md +151 -0
  24. package/content/prompts/arquitetura/ddd-bounded-contexts.md +183 -0
  25. package/content/prompts/arquitetura/ddd-cqrs.md +176 -0
  26. package/content/prompts/arquitetura/modelo-dominio.md +207 -0
  27. package/content/prompts/arquitetura/multi-tenancy.md +235 -0
  28. package/content/prompts/database/migrations-zero-downtime.md +192 -0
  29. package/content/prompts/database/otimizacao-queries.md +296 -0
  30. package/content/prompts/desenvolvimento/code-review.md +301 -0
  31. package/content/prompts/desenvolvimento/gerar-servico.md +271 -0
  32. package/content/prompts/devops/docker-compose.md +336 -0
  33. package/content/prompts/devops/feature-flags.md +374 -0
  34. package/content/prompts/devops/kubernetes-deploy.md +460 -0
  35. package/content/prompts/devops/pipeline-cicd.md +358 -0
  36. package/content/prompts/devops/terraform-iac.md +502 -0
  37. package/content/prompts/escalabilidade/analise-performance.md +240 -0
  38. package/content/prompts/escalabilidade/analise-performance.txt +94 -0
  39. package/content/prompts/escalabilidade/caching.md +255 -0
  40. package/content/prompts/observabilidade/chaos-testing.md +237 -0
  41. package/content/prompts/observabilidade/estrategia-observabilidade.md +263 -0
  42. package/content/prompts/observabilidade/estrategia-observabilidade.txt +134 -0
  43. package/content/prompts/observabilidade/slos.md +215 -0
  44. package/content/prompts/produto/discovery-inicial.md +203 -0
  45. package/content/prompts/produto/discovery-inicial.txt +33 -0
  46. package/content/prompts/requisitos/refinar-requisitos.md +232 -0
  47. package/content/prompts/requisitos/refinar-requisitos.txt +40 -0
  48. package/content/prompts/seguranca/analise-seguranca.md +243 -0
  49. package/content/prompts/seguranca/pentest-checklist.md +333 -0
  50. package/content/prompts/seguranca/rate-limiting.md +356 -0
  51. package/content/prompts/seguranca/revisao-lgpd.md +227 -0
  52. package/content/prompts/seguranca/threat-modeling.md +224 -0
  53. package/content/prompts/testes/contract-testing.md +340 -0
  54. package/content/prompts/testes/gerar-testes-unitarios.md +474 -0
  55. package/content/prompts/testes/testes-e2e.md +460 -0
  56. package/content/prompts/testes/testes-integracao.md +418 -0
  57. package/content/prompts/testes/testes-performance.md +458 -0
  58. package/content/prompts/ux/gerar-ui-stitch.md +151 -0
  59. package/content/skills/api-patterns/SKILL.md +81 -0
  60. package/content/skills/api-patterns/api-style.md +42 -0
  61. package/content/skills/api-patterns/auth.md +24 -0
  62. package/content/skills/api-patterns/documentation.md +26 -0
  63. package/content/skills/api-patterns/graphql.md +41 -0
  64. package/content/skills/api-patterns/rate-limiting.md +31 -0
  65. package/content/skills/api-patterns/response.md +37 -0
  66. package/content/skills/api-patterns/rest.md +40 -0
  67. package/content/skills/api-patterns/scripts/api_validator.py +211 -0
  68. package/content/skills/api-patterns/security-testing.md +122 -0
  69. package/content/skills/api-patterns/trpc.md +41 -0
  70. package/content/skills/api-patterns/versioning.md +22 -0
  71. package/content/skills/app-builder/SKILL.md +75 -0
  72. package/content/skills/app-builder/agent-coordination.md +71 -0
  73. package/content/skills/app-builder/feature-building.md +53 -0
  74. package/content/skills/app-builder/project-detection.md +34 -0
  75. package/content/skills/app-builder/scaffolding.md +118 -0
  76. package/content/skills/app-builder/tech-stack.md +40 -0
  77. package/content/skills/app-builder/templates/SKILL.md +39 -0
  78. package/content/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  79. package/content/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  80. package/content/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  81. package/content/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  82. package/content/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  83. package/content/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  84. package/content/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  85. package/content/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  86. package/content/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  87. package/content/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  88. package/content/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  89. package/content/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  90. package/content/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  91. package/content/skills/architecture/SKILL.md +55 -0
  92. package/content/skills/architecture/context-discovery.md +43 -0
  93. package/content/skills/architecture/examples.md +94 -0
  94. package/content/skills/architecture/pattern-selection.md +68 -0
  95. package/content/skills/architecture/patterns-reference.md +50 -0
  96. package/content/skills/architecture/trade-off-analysis.md +77 -0
  97. package/content/skills/bash-linux/SKILL.md +199 -0
  98. package/content/skills/behavioral-modes/SKILL.md +242 -0
  99. package/content/skills/brainstorming/SKILL.md +163 -0
  100. package/content/skills/brainstorming/dynamic-questioning.md +350 -0
  101. package/content/skills/clean-code/SKILL.md +201 -0
  102. package/content/skills/code-review-checklist/SKILL.md +109 -0
  103. package/content/skills/database-design/SKILL.md +52 -0
  104. package/content/skills/database-design/database-selection.md +43 -0
  105. package/content/skills/database-design/indexing.md +39 -0
  106. package/content/skills/database-design/migrations.md +48 -0
  107. package/content/skills/database-design/optimization.md +36 -0
  108. package/content/skills/database-design/orm-selection.md +30 -0
  109. package/content/skills/database-design/schema-design.md +56 -0
  110. package/content/skills/database-design/scripts/schema_validator.py +172 -0
  111. package/content/skills/deployment-procedures/SKILL.md +241 -0
  112. package/content/skills/doc.md +177 -0
  113. package/content/skills/documentation-templates/SKILL.md +194 -0
  114. package/content/skills/frontend-design/SKILL.md +396 -0
  115. package/content/skills/frontend-design/animation-guide.md +331 -0
  116. package/content/skills/frontend-design/color-system.md +311 -0
  117. package/content/skills/frontend-design/decision-trees.md +418 -0
  118. package/content/skills/frontend-design/motion-graphics.md +306 -0
  119. package/content/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  120. package/content/skills/frontend-design/scripts/ux_audit.py +722 -0
  121. package/content/skills/frontend-design/typography-system.md +345 -0
  122. package/content/skills/frontend-design/ux-psychology.md +541 -0
  123. package/content/skills/frontend-design/visual-effects.md +383 -0
  124. package/content/skills/game-development/2d-games/SKILL.md +119 -0
  125. package/content/skills/game-development/3d-games/SKILL.md +135 -0
  126. package/content/skills/game-development/SKILL.md +167 -0
  127. package/content/skills/game-development/game-art/SKILL.md +185 -0
  128. package/content/skills/game-development/game-audio/SKILL.md +190 -0
  129. package/content/skills/game-development/game-design/SKILL.md +129 -0
  130. package/content/skills/game-development/mobile-games/SKILL.md +108 -0
  131. package/content/skills/game-development/multiplayer/SKILL.md +132 -0
  132. package/content/skills/game-development/pc-games/SKILL.md +144 -0
  133. package/content/skills/game-development/vr-ar/SKILL.md +123 -0
  134. package/content/skills/game-development/web-games/SKILL.md +150 -0
  135. package/content/skills/geo-fundamentals/SKILL.md +156 -0
  136. package/content/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  137. package/content/skills/i18n-localization/SKILL.md +154 -0
  138. package/content/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  139. package/content/skills/intelligent-routing/SKILL.md +334 -0
  140. package/content/skills/lint-and-validate/SKILL.md +45 -0
  141. package/content/skills/lint-and-validate/scripts/lint_runner.py +172 -0
  142. package/content/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  143. package/content/skills/mcp-builder/SKILL.md +176 -0
  144. package/content/skills/mobile-design/SKILL.md +394 -0
  145. package/content/skills/mobile-design/decision-trees.md +516 -0
  146. package/content/skills/mobile-design/mobile-backend.md +491 -0
  147. package/content/skills/mobile-design/mobile-color-system.md +420 -0
  148. package/content/skills/mobile-design/mobile-debugging.md +122 -0
  149. package/content/skills/mobile-design/mobile-design-thinking.md +357 -0
  150. package/content/skills/mobile-design/mobile-navigation.md +458 -0
  151. package/content/skills/mobile-design/mobile-performance.md +767 -0
  152. package/content/skills/mobile-design/mobile-testing.md +356 -0
  153. package/content/skills/mobile-design/mobile-typography.md +433 -0
  154. package/content/skills/mobile-design/platform-android.md +666 -0
  155. package/content/skills/mobile-design/platform-ios.md +561 -0
  156. package/content/skills/mobile-design/scripts/mobile_audit.py +670 -0
  157. package/content/skills/mobile-design/touch-psychology.md +537 -0
  158. package/content/skills/nextjs-best-practices/SKILL.md +203 -0
  159. package/content/skills/nodejs-best-practices/SKILL.md +333 -0
  160. package/content/skills/parallel-agents/SKILL.md +175 -0
  161. package/content/skills/performance-profiling/SKILL.md +143 -0
  162. package/content/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  163. package/content/skills/plan-writing/SKILL.md +152 -0
  164. package/content/skills/powershell-windows/SKILL.md +167 -0
  165. package/content/skills/python-patterns/SKILL.md +441 -0
  166. package/content/skills/react-patterns/SKILL.md +198 -0
  167. package/content/skills/red-team-tactics/SKILL.md +199 -0
  168. package/content/skills/seo-fundamentals/SKILL.md +129 -0
  169. package/content/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  170. package/content/skills/server-management/SKILL.md +161 -0
  171. package/content/skills/systematic-debugging/SKILL.md +109 -0
  172. package/content/skills/tailwind-patterns/SKILL.md +269 -0
  173. package/content/skills/tdd-workflow/SKILL.md +149 -0
  174. package/content/skills/testing-patterns/SKILL.md +178 -0
  175. package/content/skills/testing-patterns/scripts/test_runner.py +219 -0
  176. package/content/skills/vulnerability-scanner/SKILL.md +276 -0
  177. package/content/skills/vulnerability-scanner/checklists.md +121 -0
  178. package/content/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  179. package/content/skills/webapp-testing/SKILL.md +187 -0
  180. package/content/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  181. package/content/specialists/Especialista em Acessibilidade.md +266 -0
  182. package/content/specialists/Especialista em An/303/241lise de Testes.md" +434 -0
  183. package/content/specialists/Especialista em Arquitetura Avan/303/247ada.md" +358 -0
  184. package/content/specialists/Especialista em Arquitetura de Software.md +177 -0
  185. package/content/specialists/Especialista em Banco de Dados.md +260 -0
  186. package/content/specialists/Especialista em Contrato de API.md +172 -0
  187. package/content/specialists/Especialista em Dados e Analytics com IA.md +246 -0
  188. package/content/specialists/Especialista em Debugging e Troubleshooting.md +191 -0
  189. package/content/specialists/Especialista em Desenvolvimento Frontend.md +477 -0
  190. package/content/specialists/Especialista em Desenvolvimento Mobile.md +241 -0
  191. package/content/specialists/Especialista em Desenvolvimento e Vibe Coding Estruturado.md +417 -0
  192. package/content/specialists/Especialista em DevOps e Infraestrutura.md +294 -0
  193. package/content/specialists/Especialista em Documenta/303/247/303/243o T/303/251cnica.md" +227 -0
  194. package/content/specialists/Especialista em Engenharia de Requisitos com IA.md +299 -0
  195. package/content/specialists/Especialista em Explora/303/247/303/243o de Codebase.md" +179 -0
  196. package/content/specialists/Especialista em Gest/303/243o de Produto.md" +179 -0
  197. package/content/specialists/Especialista em Migra/303/247/303/243o e Moderniza/303/247/303/243o.md" +410 -0
  198. package/content/specialists/Especialista em Modelagem e Arquitetura de Dom/303/255nio com IA.md" +248 -0
  199. package/content/specialists/Especialista em Observabilidade.md +415 -0
  200. package/content/specialists/Especialista em Performance e Escalabilidade.md +373 -0
  201. package/content/specialists/Especialista em Plano de Execu/303/247/303/243o com IA.md" +341 -0
  202. package/content/specialists/Especialista em Prototipagem R/303/241pida com Google Stitch.md" +419 -0
  203. package/content/specialists/Especialista em Seguran/303/247a da Informa/303/247/303/243o.md" +508 -0
  204. package/content/specialists/Especialista em UX Design.md +453 -0
  205. package/content/specialists/INDEX.md +43 -0
  206. package/content/templates/PRD.md +165 -0
  207. package/content/templates/README.md +65 -0
  208. package/content/templates/adr.md +103 -0
  209. package/content/templates/arquitetura.md +279 -0
  210. package/content/templates/backlog.md +185 -0
  211. package/content/templates/checklist-seguranca.md +180 -0
  212. package/content/templates/contexto.md +120 -0
  213. package/content/templates/criterios-aceite.md +99 -0
  214. package/content/templates/design-banco.md +270 -0
  215. package/content/templates/design-doc.md +240 -0
  216. package/content/templates/feature.md +88 -0
  217. package/content/templates/historia-backend.md +84 -0
  218. package/content/templates/historia-frontend.md +75 -0
  219. package/content/templates/historia-usuario.md +125 -0
  220. package/content/templates/mapa-navegacao.md +133 -0
  221. package/content/templates/matriz-rastreabilidade.md +121 -0
  222. package/content/templates/modelo-dominio.md +219 -0
  223. package/content/templates/plano-testes.md +199 -0
  224. package/content/templates/prototipo-stitch.md +138 -0
  225. package/content/templates/requisitos.md +162 -0
  226. package/content/templates/slo-sli.md +197 -0
  227. package/content/workflows/README-MCP.md +363 -0
  228. package/content/workflows/brainstorm.md +113 -0
  229. package/content/workflows/create.md +59 -0
  230. package/content/workflows/debug.md +103 -0
  231. package/content/workflows/deploy.md +176 -0
  232. package/content/workflows/enhance.md +63 -0
  233. package/content/workflows/mcp-debug.md +506 -0
  234. package/content/workflows/mcp-feature.md +385 -0
  235. package/content/workflows/mcp-gate.md +413 -0
  236. package/content/workflows/mcp-next.md +388 -0
  237. package/content/workflows/mcp-refactor.md +600 -0
  238. package/content/workflows/mcp-start.md +304 -0
  239. package/content/workflows/mcp-status.md +400 -0
  240. package/content/workflows/orchestrate.md +237 -0
  241. package/content/workflows/plan.md +89 -0
  242. package/content/workflows/preview.md +81 -0
  243. package/content/workflows/status.md +86 -0
  244. package/content/workflows/test.md +144 -0
  245. package/content/workflows/ui-ux-pro-max.md +296 -0
  246. package/dist/commands/init.d.ts +6 -0
  247. package/dist/commands/init.js +138 -0
  248. package/dist/commands/update.d.ts +5 -0
  249. package/dist/commands/update.js +50 -0
  250. package/dist/index.d.ts +2 -0
  251. package/dist/index.js +21 -0
  252. package/package.json +48 -0
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Lint Runner - Unified linting and type checking
4
+ Runs appropriate linters based on project type.
5
+
6
+ Usage:
7
+ python lint_runner.py <project_path>
8
+
9
+ Supports:
10
+ - Node.js: npm run lint, npx tsc --noEmit
11
+ - Python: ruff check, mypy
12
+ """
13
+
14
+ import subprocess
15
+ import sys
16
+ import json
17
+ from pathlib import Path
18
+ from datetime import datetime
19
+
20
+ # Fix Windows console encoding
21
+ try:
22
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
23
+ except:
24
+ pass
25
+
26
+
27
+ def detect_project_type(project_path: Path) -> dict:
28
+ """Detect project type and available linters."""
29
+ result = {
30
+ "type": "unknown",
31
+ "linters": []
32
+ }
33
+
34
+ # Node.js project
35
+ package_json = project_path / "package.json"
36
+ if package_json.exists():
37
+ result["type"] = "node"
38
+ try:
39
+ pkg = json.loads(package_json.read_text(encoding='utf-8'))
40
+ scripts = pkg.get("scripts", {})
41
+ deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})}
42
+
43
+ # Check for lint script
44
+ if "lint" in scripts:
45
+ result["linters"].append({"name": "npm lint", "cmd": ["npm", "run", "lint"]})
46
+ elif "eslint" in deps:
47
+ result["linters"].append({"name": "eslint", "cmd": ["npx", "eslint", "."]})
48
+
49
+ # Check for TypeScript
50
+ if "typescript" in deps or (project_path / "tsconfig.json").exists():
51
+ result["linters"].append({"name": "tsc", "cmd": ["npx", "tsc", "--noEmit"]})
52
+
53
+ except:
54
+ pass
55
+
56
+ # Python project
57
+ if (project_path / "pyproject.toml").exists() or (project_path / "requirements.txt").exists():
58
+ result["type"] = "python"
59
+
60
+ # Check for ruff
61
+ result["linters"].append({"name": "ruff", "cmd": ["ruff", "check", "."]})
62
+
63
+ # Check for mypy
64
+ if (project_path / "mypy.ini").exists() or (project_path / "pyproject.toml").exists():
65
+ result["linters"].append({"name": "mypy", "cmd": ["mypy", "."]})
66
+
67
+ return result
68
+
69
+
70
+ def run_linter(linter: dict, cwd: Path) -> dict:
71
+ """Run a single linter and return results."""
72
+ result = {
73
+ "name": linter["name"],
74
+ "passed": False,
75
+ "output": "",
76
+ "error": ""
77
+ }
78
+
79
+ try:
80
+ proc = subprocess.run(
81
+ linter["cmd"],
82
+ cwd=str(cwd),
83
+ capture_output=True,
84
+ text=True,
85
+ encoding='utf-8',
86
+ errors='replace',
87
+ timeout=120
88
+ )
89
+
90
+ result["output"] = proc.stdout[:2000] if proc.stdout else ""
91
+ result["error"] = proc.stderr[:500] if proc.stderr else ""
92
+ result["passed"] = proc.returncode == 0
93
+
94
+ except FileNotFoundError:
95
+ result["error"] = f"Command not found: {linter['cmd'][0]}"
96
+ except subprocess.TimeoutExpired:
97
+ result["error"] = "Timeout after 120s"
98
+ except Exception as e:
99
+ result["error"] = str(e)
100
+
101
+ return result
102
+
103
+
104
+ def main():
105
+ project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
106
+
107
+ print(f"\n{'='*60}")
108
+ print(f"[LINT RUNNER] Unified Linting")
109
+ print(f"{'='*60}")
110
+ print(f"Project: {project_path}")
111
+ print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
112
+
113
+ # Detect project type
114
+ project_info = detect_project_type(project_path)
115
+ print(f"Type: {project_info['type']}")
116
+ print(f"Linters: {len(project_info['linters'])}")
117
+ print("-"*60)
118
+
119
+ if not project_info["linters"]:
120
+ print("No linters found for this project type.")
121
+ output = {
122
+ "script": "lint_runner",
123
+ "project": str(project_path),
124
+ "type": project_info["type"],
125
+ "checks": [],
126
+ "passed": True,
127
+ "message": "No linters configured"
128
+ }
129
+ print(json.dumps(output, indent=2))
130
+ sys.exit(0)
131
+
132
+ # Run each linter
133
+ results = []
134
+ all_passed = True
135
+
136
+ for linter in project_info["linters"]:
137
+ print(f"\nRunning: {linter['name']}...")
138
+ result = run_linter(linter, project_path)
139
+ results.append(result)
140
+
141
+ if result["passed"]:
142
+ print(f" [PASS] {linter['name']}")
143
+ else:
144
+ print(f" [FAIL] {linter['name']}")
145
+ if result["error"]:
146
+ print(f" Error: {result['error'][:200]}")
147
+ all_passed = False
148
+
149
+ # Summary
150
+ print("\n" + "="*60)
151
+ print("SUMMARY")
152
+ print("="*60)
153
+
154
+ for r in results:
155
+ icon = "[PASS]" if r["passed"] else "[FAIL]"
156
+ print(f"{icon} {r['name']}")
157
+
158
+ output = {
159
+ "script": "lint_runner",
160
+ "project": str(project_path),
161
+ "type": project_info["type"],
162
+ "checks": results,
163
+ "passed": all_passed
164
+ }
165
+
166
+ print("\n" + json.dumps(output, indent=2))
167
+
168
+ sys.exit(0 if all_passed else 1)
169
+
170
+
171
+ if __name__ == "__main__":
172
+ main()
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Type Coverage Checker - Measures TypeScript/Python type coverage.
4
+ Identifies untyped functions, any usage, and type safety issues.
5
+ """
6
+ import sys
7
+ import re
8
+ import subprocess
9
+ from pathlib import Path
10
+
11
+ # Fix Windows console encoding for Unicode output
12
+ try:
13
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
14
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
15
+ except AttributeError:
16
+ pass # Python < 3.7
17
+
18
+ def check_typescript_coverage(project_path: Path) -> dict:
19
+ """Check TypeScript type coverage."""
20
+ issues = []
21
+ passed = []
22
+ stats = {'any_count': 0, 'untyped_functions': 0, 'total_functions': 0}
23
+
24
+ ts_files = list(project_path.rglob("*.ts")) + list(project_path.rglob("*.tsx"))
25
+ ts_files = [f for f in ts_files if 'node_modules' not in str(f) and '.d.ts' not in str(f)]
26
+
27
+ if not ts_files:
28
+ return {'type': 'typescript', 'files': 0, 'passed': [], 'issues': ["[!] No TypeScript files found"], 'stats': stats}
29
+
30
+ for file_path in ts_files[:30]: # Limit
31
+ try:
32
+ content = file_path.read_text(encoding='utf-8', errors='ignore')
33
+
34
+ # Count 'any' usage
35
+ any_matches = re.findall(r':\s*any\b', content)
36
+ stats['any_count'] += len(any_matches)
37
+
38
+ # Find functions without return types
39
+ # function name(params) { - no return type
40
+ untyped = re.findall(r'function\s+\w+\s*\([^)]*\)\s*{', content)
41
+ # Arrow functions without types: const fn = (x) => or (x) =>
42
+ untyped += re.findall(r'=\s*\([^:)]*\)\s*=>', content)
43
+ stats['untyped_functions'] += len(untyped)
44
+
45
+ # Count typed functions
46
+ typed = re.findall(r'function\s+\w+\s*\([^)]*\)\s*:\s*\w+', content)
47
+ typed += re.findall(r':\s*\([^)]*\)\s*=>\s*\w+', content)
48
+ stats['total_functions'] += len(typed) + len(untyped)
49
+
50
+ except Exception:
51
+ continue
52
+
53
+ # Analyze results
54
+ if stats['any_count'] == 0:
55
+ passed.append("[OK] No 'any' types found")
56
+ elif stats['any_count'] <= 5:
57
+ issues.append(f"[!] {stats['any_count']} 'any' types found (acceptable)")
58
+ else:
59
+ issues.append(f"[X] {stats['any_count']} 'any' types found (too many)")
60
+
61
+ if stats['total_functions'] > 0:
62
+ typed_ratio = (stats['total_functions'] - stats['untyped_functions']) / stats['total_functions'] * 100
63
+ if typed_ratio >= 80:
64
+ passed.append(f"[OK] Type coverage: {typed_ratio:.0f}%")
65
+ elif typed_ratio >= 50:
66
+ issues.append(f"[!] Type coverage: {typed_ratio:.0f}% (improve)")
67
+ else:
68
+ issues.append(f"[X] Type coverage: {typed_ratio:.0f}% (too low)")
69
+
70
+ passed.append(f"[OK] Analyzed {len(ts_files)} TypeScript files")
71
+
72
+ return {'type': 'typescript', 'files': len(ts_files), 'passed': passed, 'issues': issues, 'stats': stats}
73
+
74
+ def check_python_coverage(project_path: Path) -> dict:
75
+ """Check Python type hints coverage."""
76
+ issues = []
77
+ passed = []
78
+ stats = {'untyped_functions': 0, 'typed_functions': 0, 'any_count': 0}
79
+
80
+ py_files = list(project_path.rglob("*.py"))
81
+ py_files = [f for f in py_files if not any(x in str(f) for x in ['venv', '__pycache__', '.git', 'node_modules'])]
82
+
83
+ if not py_files:
84
+ return {'type': 'python', 'files': 0, 'passed': [], 'issues': ["[!] No Python files found"], 'stats': stats}
85
+
86
+ for file_path in py_files[:30]: # Limit
87
+ try:
88
+ content = file_path.read_text(encoding='utf-8', errors='ignore')
89
+
90
+ # Count Any usage
91
+ any_matches = re.findall(r':\s*Any\b', content)
92
+ stats['any_count'] += len(any_matches)
93
+
94
+ # Find functions with type hints
95
+ typed_funcs = re.findall(r'def\s+\w+\s*\([^)]*:[^)]+\)', content)
96
+ typed_funcs += re.findall(r'def\s+\w+\s*\([^)]*\)\s*->', content)
97
+ stats['typed_functions'] += len(typed_funcs)
98
+
99
+ # Find functions without type hints
100
+ all_funcs = re.findall(r'def\s+\w+\s*\(', content)
101
+ stats['untyped_functions'] += len(all_funcs) - len(typed_funcs)
102
+
103
+ except Exception:
104
+ continue
105
+
106
+ total = stats['typed_functions'] + stats['untyped_functions']
107
+
108
+ if total > 0:
109
+ typed_ratio = stats['typed_functions'] / total * 100
110
+ if typed_ratio >= 70:
111
+ passed.append(f"[OK] Type hints coverage: {typed_ratio:.0f}%")
112
+ elif typed_ratio >= 40:
113
+ issues.append(f"[!] Type hints coverage: {typed_ratio:.0f}%")
114
+ else:
115
+ issues.append(f"[X] Type hints coverage: {typed_ratio:.0f}% (add type hints)")
116
+
117
+ if stats['any_count'] == 0:
118
+ passed.append("[OK] No 'Any' types found")
119
+ elif stats['any_count'] <= 3:
120
+ issues.append(f"[!] {stats['any_count']} 'Any' types found")
121
+ else:
122
+ issues.append(f"[X] {stats['any_count']} 'Any' types found")
123
+
124
+ passed.append(f"[OK] Analyzed {len(py_files)} Python files")
125
+
126
+ return {'type': 'python', 'files': len(py_files), 'passed': passed, 'issues': issues, 'stats': stats}
127
+
128
+ def main():
129
+ target = sys.argv[1] if len(sys.argv) > 1 else "."
130
+ project_path = Path(target)
131
+
132
+ print("\n" + "=" * 60)
133
+ print(" TYPE COVERAGE CHECKER")
134
+ print("=" * 60 + "\n")
135
+
136
+ results = []
137
+
138
+ # Check TypeScript
139
+ ts_result = check_typescript_coverage(project_path)
140
+ if ts_result['files'] > 0:
141
+ results.append(ts_result)
142
+
143
+ # Check Python
144
+ py_result = check_python_coverage(project_path)
145
+ if py_result['files'] > 0:
146
+ results.append(py_result)
147
+
148
+ if not results:
149
+ print("[!] No TypeScript or Python files found.")
150
+ sys.exit(0)
151
+
152
+ # Print results
153
+ critical_issues = 0
154
+ for result in results:
155
+ print(f"\n[{result['type'].upper()}]")
156
+ print("-" * 40)
157
+ for item in result['passed']:
158
+ print(f" {item}")
159
+ for item in result['issues']:
160
+ print(f" {item}")
161
+ if item.startswith("[X]"):
162
+ critical_issues += 1
163
+
164
+ print("\n" + "=" * 60)
165
+ if critical_issues == 0:
166
+ print("[OK] TYPE COVERAGE: ACCEPTABLE")
167
+ sys.exit(0)
168
+ else:
169
+ print(f"[X] TYPE COVERAGE: {critical_issues} critical issues")
170
+ sys.exit(1)
171
+
172
+ if __name__ == "__main__":
173
+ main()
@@ -0,0 +1,176 @@
1
+ ---
2
+ name: mcp-builder
3
+ description: MCP (Model Context Protocol) server building principles. Tool design, resource patterns, best practices.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep
5
+ ---
6
+
7
+ # MCP Builder
8
+
9
+ > Principles for building MCP servers.
10
+
11
+ ---
12
+
13
+ ## 1. MCP Overview
14
+
15
+ ### What is MCP?
16
+
17
+ Model Context Protocol - standard for connecting AI systems with external tools and data sources.
18
+
19
+ ### Core Concepts
20
+
21
+ | Concept | Purpose |
22
+ |---------|---------|
23
+ | **Tools** | Functions AI can call |
24
+ | **Resources** | Data AI can read |
25
+ | **Prompts** | Pre-defined prompt templates |
26
+
27
+ ---
28
+
29
+ ## 2. Server Architecture
30
+
31
+ ### Project Structure
32
+
33
+ ```
34
+ my-mcp-server/
35
+ ├── src/
36
+ │ └── index.ts # Main entry
37
+ ├── package.json
38
+ └── tsconfig.json
39
+ ```
40
+
41
+ ### Transport Types
42
+
43
+ | Type | Use |
44
+ |------|-----|
45
+ | **Stdio** | Local, CLI-based |
46
+ | **SSE** | Web-based, streaming |
47
+ | **WebSocket** | Real-time, bidirectional |
48
+
49
+ ---
50
+
51
+ ## 3. Tool Design Principles
52
+
53
+ ### Good Tool Design
54
+
55
+ | Principle | Description |
56
+ |-----------|-------------|
57
+ | Clear name | Action-oriented (get_weather, create_user) |
58
+ | Single purpose | One thing well |
59
+ | Validated input | Schema with types and descriptions |
60
+ | Structured output | Predictable response format |
61
+
62
+ ### Input Schema Design
63
+
64
+ | Field | Required? |
65
+ |-------|-----------|
66
+ | Type | Yes - object |
67
+ | Properties | Define each param |
68
+ | Required | List mandatory params |
69
+ | Description | Human-readable |
70
+
71
+ ---
72
+
73
+ ## 4. Resource Patterns
74
+
75
+ ### Resource Types
76
+
77
+ | Type | Use |
78
+ |------|-----|
79
+ | Static | Fixed data (config, docs) |
80
+ | Dynamic | Generated on request |
81
+ | Template | URI with parameters |
82
+
83
+ ### URI Patterns
84
+
85
+ | Pattern | Example |
86
+ |---------|---------|
87
+ | Fixed | `docs://readme` |
88
+ | Parameterized | `users://{userId}` |
89
+ | Collection | `files://project/*` |
90
+
91
+ ---
92
+
93
+ ## 5. Error Handling
94
+
95
+ ### Error Types
96
+
97
+ | Situation | Response |
98
+ |-----------|----------|
99
+ | Invalid params | Validation error message |
100
+ | Not found | Clear "not found" |
101
+ | Server error | Generic error, log details |
102
+
103
+ ### Best Practices
104
+
105
+ - Return structured errors
106
+ - Don't expose internal details
107
+ - Log for debugging
108
+ - Provide actionable messages
109
+
110
+ ---
111
+
112
+ ## 6. Multimodal Handling
113
+
114
+ ### Supported Types
115
+
116
+ | Type | Encoding |
117
+ |------|----------|
118
+ | Text | Plain text |
119
+ | Images | Base64 + MIME type |
120
+ | Files | Base64 + MIME type |
121
+
122
+ ---
123
+
124
+ ## 7. Security Principles
125
+
126
+ ### Input Validation
127
+
128
+ - Validate all tool inputs
129
+ - Sanitize user-provided data
130
+ - Limit resource access
131
+
132
+ ### API Keys
133
+
134
+ - Use environment variables
135
+ - Don't log secrets
136
+ - Validate permissions
137
+
138
+ ---
139
+
140
+ ## 8. Configuration
141
+
142
+ ### Claude Desktop Config
143
+
144
+ | Field | Purpose |
145
+ |-------|---------|
146
+ | command | Executable to run |
147
+ | args | Command arguments |
148
+ | env | Environment variables |
149
+
150
+ ---
151
+
152
+ ## 9. Testing
153
+
154
+ ### Test Categories
155
+
156
+ | Type | Focus |
157
+ |------|-------|
158
+ | Unit | Tool logic |
159
+ | Integration | Full server |
160
+ | Contract | Schema validation |
161
+
162
+ ---
163
+
164
+ ## 10. Best Practices Checklist
165
+
166
+ - [ ] Clear, action-oriented tool names
167
+ - [ ] Complete input schemas with descriptions
168
+ - [ ] Structured JSON output
169
+ - [ ] Error handling for all cases
170
+ - [ ] Input validation
171
+ - [ ] Environment-based configuration
172
+ - [ ] Logging for debugging
173
+
174
+ ---
175
+
176
+ > **Remember:** MCP tools should be simple, focused, and well-documented. The AI relies on descriptions to use them correctly.