@polymorphism-tech/morph-spec 4.11.1 → 4.13.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 (317) hide show
  1. package/README.md +21 -29
  2. package/bin/morph-spec.js +41 -24
  3. package/bin/task-manager.js +962 -1341
  4. package/bin/validate.js +1 -1
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +10 -11
  7. package/docs/QUICKSTART.md +15 -15
  8. package/framework/CLAUDE.md +5 -2
  9. package/framework/agents/README.md +3 -4
  10. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  11. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  12. package/framework/agents/architecture/standards-architect.md +21 -31
  13. package/framework/agents/backend/dotnet-senior.md +160 -86
  14. package/framework/agents/backend/ef-modeler.md +2 -6
  15. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  16. package/framework/agents/backend/ms-agent-expert.md +1 -1
  17. package/framework/agents/frontend/nextjs-expert.md +198 -133
  18. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  19. package/framework/agents/infrastructure/infra-architect.md +191 -27
  20. package/framework/agents/integrations/clerk-auth.md +19 -26
  21. package/framework/agents/integrations/hangfire-integration.md +1 -4
  22. package/framework/agents.json +226 -1454
  23. package/framework/commands/morph-apply.md +4 -4
  24. package/framework/commands/morph-preflight.md +4 -26
  25. package/framework/commands/morph-proposal.md +19 -19
  26. package/framework/commands/morph-status.md +2 -2
  27. package/framework/commands/morph-troubleshoot.md +6 -13
  28. package/framework/hooks/README.md +1 -6
  29. package/framework/hooks/claude-code/post-tool-use/agent-complete.js +122 -0
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/dispatch-helpers.js +17 -0
  42. package/framework/hooks/shared/phase-utils.js +4 -8
  43. package/framework/hooks/shared/state-reader.js +34 -3
  44. package/framework/phases.json +7 -45
  45. package/framework/rules/ai-agents-standards.md +15 -0
  46. package/framework/rules/asaas-standards.md +13 -0
  47. package/framework/rules/clerk-standards.md +13 -0
  48. package/framework/rules/csharp-standards.md +8 -4
  49. package/framework/rules/data-standards.md +18 -0
  50. package/framework/rules/dotnet-templates.md +87 -0
  51. package/framework/rules/frontend-standards.md +13 -13
  52. package/framework/rules/hangfire-standards.md +13 -0
  53. package/framework/rules/infrastructure-standards.md +27 -16
  54. package/framework/rules/morph-workflow.md +73 -13
  55. package/framework/rules/nextjs-standards.md +1 -0
  56. package/framework/rules/nextjs-templates.md +40 -0
  57. package/framework/rules/resend-standards.md +12 -0
  58. package/framework/rules/supabase-standards.md +29 -0
  59. package/framework/skills/README.md +6 -8
  60. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  61. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  62. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  63. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  64. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  65. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  66. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  67. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  68. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  69. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  71. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  73. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  74. package/framework/skills/level-1-workflows/README.md +1 -1
  75. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  76. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  78. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  79. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2338
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +342 -211
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/mcp/mcp-setup.js +28 -6
  159. package/src/commands/phase/phase-reset.js +1 -1
  160. package/src/commands/project/doctor.js +10 -32
  161. package/src/commands/project/init.js +32 -1
  162. package/src/commands/project/status.js +6 -12
  163. package/src/commands/scaffold/scaffold.js +131 -0
  164. package/src/commands/scope/escalate.js +1 -1
  165. package/src/commands/state/advance-phase.js +15 -29
  166. package/src/commands/state/state.js +20 -5
  167. package/src/commands/tasks/task.js +0 -30
  168. package/src/commands/validation/validate-feature.js +3 -10
  169. package/src/core/paths/output-schema.js +12 -13
  170. package/src/core/state/phase-state-machine.js +211 -217
  171. package/src/core/state/state-manager.js +9 -9
  172. package/src/lib/agents/agents-manager.js +2 -2
  173. package/src/lib/agents/output-collector.js +1 -2
  174. package/src/lib/detectors/design-system-detector.js +4 -4
  175. package/src/lib/detectors/index.js +1 -11
  176. package/src/lib/generators/architecture-scanner.js +640 -0
  177. package/src/lib/generators/context-generator.js +3 -3
  178. package/src/lib/generators/design-system-generator.js +508 -298
  179. package/src/lib/generators/index.js +12 -10
  180. package/src/lib/generators/metadata-extractor.js +386 -387
  181. package/src/lib/generators/recap-generator.js +4 -4
  182. package/src/lib/generators/scaffold-generator.js +317 -0
  183. package/src/lib/generators/settings-generator.js +0 -1
  184. package/src/lib/phase-chain/phase-validator.js +64 -42
  185. package/src/lib/stack/stack-profile.js +2 -2
  186. package/src/lib/standards/digest-builder.js +72 -285
  187. package/src/lib/tasks/task-parser.js +11 -5
  188. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  189. package/src/lib/validators/content/content-validator.js +287 -287
  190. package/src/lib/validators/css/css-validator.js +340 -352
  191. package/src/lib/validators/design-system/design-system-validator.js +11 -5
  192. package/src/lib/validators/packages/package-validator.js +347 -360
  193. package/src/lib/validators/shared/issue-counter.js +14 -18
  194. package/src/lib/validators/validation-runner.js +3 -19
  195. package/src/scripts/setup-infra.js +1 -1
  196. package/src/utils/agents-installer.js +24 -3
  197. package/src/utils/file-copier.js +1 -0
  198. package/src/utils/hooks-installer.js +21 -19
  199. package/src/utils/skills-installer.js +178 -178
  200. package/framework/agents/architecture/prompt-engineer.md +0 -195
  201. package/framework/agents/backend/api-designer.md +0 -106
  202. package/framework/agents/frontend/blazor-builder.md +0 -229
  203. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  204. package/framework/agents/infrastructure/azure-architect.md +0 -150
  205. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  206. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  207. package/framework/agents/infrastructure/container-specialist.md +0 -137
  208. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  209. package/framework/agents/integrations/azure-identity.md +0 -148
  210. package/framework/agents/quality/code-analyzer.md +0 -239
  211. package/framework/agents/quality/testing-specialist.md +0 -130
  212. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  213. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  214. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  215. package/framework/index/troubleshooting-index.json +0 -184
  216. package/framework/rules/testing-standards.md +0 -14
  217. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  218. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  219. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  220. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  221. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  222. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  223. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  224. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  225. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  226. package/framework/standards/architecture/ddd/entities.md +0 -99
  227. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  228. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  229. package/framework/standards/backend/api/minimal-api.md +0 -494
  230. package/framework/standards/backend/api/rest.md +0 -492
  231. package/framework/standards/backend/authentication/passkeys.md +0 -428
  232. package/framework/standards/backend/database/ef-core.md +0 -199
  233. package/framework/standards/backend/database/migrations.md +0 -393
  234. package/framework/standards/backend/database/repository-patterns.md +0 -528
  235. package/framework/standards/backend/dotnet/async.md +0 -366
  236. package/framework/standards/backend/dotnet/core.md +0 -117
  237. package/framework/standards/backend/dotnet/di.md +0 -439
  238. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  239. package/framework/standards/context/analytics.md +0 -96
  240. package/framework/standards/context/bundles.md +0 -110
  241. package/framework/standards/context/priming.md +0 -78
  242. package/framework/standards/core/architecture.md +0 -185
  243. package/framework/standards/core/coding.md +0 -214
  244. package/framework/standards/core/git-branching-strategy.md +0 -403
  245. package/framework/standards/core/git.md +0 -185
  246. package/framework/standards/core/testing.md +0 -295
  247. package/framework/standards/data/nosql/blob-storage.md +0 -102
  248. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  249. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  250. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  251. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  252. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  253. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  254. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  255. package/framework/standards/frontend/blazor/state.md +0 -191
  256. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
  257. package/framework/standards/infrastructure/azure/azure.md +0 -624
  258. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  259. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  260. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  261. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  262. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  263. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  264. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  265. package/framework/standards/integration/api/graphql.md +0 -91
  266. package/framework/standards/integration/api/grpc.md +0 -114
  267. package/framework/standards/integration/api/rest-design.md +0 -95
  268. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  269. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  270. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  271. package/framework/standards/observability/logging.md +0 -131
  272. package/framework/standards/observability/metrics.md +0 -121
  273. package/framework/standards/observability/monitoring.md +0 -114
  274. package/framework/standards/observability/tracing.md +0 -132
  275. package/framework/standards/workflows/parallel-execution.md +0 -112
  276. package/framework/standards/workflows/thread-management.md +0 -113
  277. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  278. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  279. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  280. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  281. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  282. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  283. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  284. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  285. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  286. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  287. package/framework/templates/infrastructure/azure/README.md +0 -286
  288. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  289. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  290. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  291. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  292. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  293. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  294. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  295. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  296. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  297. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  299. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  300. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  301. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  302. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  303. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  304. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  305. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  306. package/framework/templates/saas/subscription.cs +0 -347
  307. package/framework/templates/saas/tenant.cs +0 -338
  308. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  309. package/framework/templates/ui/MudTheme.cs +0 -281
  310. package/framework/workflows/configs/nodejs-cli.json +0 -40
  311. package/src/commands/standards/context-budget.js +0 -89
  312. package/src/lib/standards/index.js +0 -7
  313. package/src/lib/standards/standards-context-injector.js +0 -302
  314. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  315. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  316. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  317. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,251 +1,141 @@
1
- # Supabase MCP Server Setup Guide
1
+ # Supabase Local Development Guide
2
2
 
3
3
  > **Scope:** nextjs-supabase
4
4
  > **Layer:** 2 (on keyword)
5
- > **Keywords:** supabase, mcp, setup, model context protocol
6
- > **Load When:** supabase mcp setup keywords detected
5
+ > **Keywords:** supabase, cli, local, docker, setup, migrations, psql
6
+ > **Load When:** supabase setup keywords detected
7
7
 
8
- Direct database management from Claude Code via Model Context Protocol
9
-
10
- ## What It Provides
11
-
12
- The Supabase MCP Server lets Claude Code interact directly with your Supabase project's database. This enables:
13
-
14
- - Running SQL queries and viewing results
15
- - Creating and managing database migrations
16
- - Inspecting table schemas, indexes, and RLS policies
17
- - Managing Supabase Auth, Storage, and Edge Functions
18
- - Schema diffing and migration generation
8
+ Local-first database management via Supabase CLI and psql — always targeting the local Docker instance.
19
9
 
20
10
  ## CRITICAL WARNING
21
11
 
22
12
  ```
23
13
  ==========================================================
24
- NEVER connect to a PRODUCTION Supabase project via MCP.
14
+ NEVER connect to a PRODUCTION Supabase project.
25
15
 
26
- MCP provides direct database access. A single bad query
27
- can DROP tables, DELETE data, or DISABLE RLS.
16
+ All database operations MUST target the local Docker
17
+ instance started via `npx supabase start`.
28
18
 
29
- ONLY connect to:
30
- - Local Supabase (supabase start)
31
- - Development/staging projects
32
- - Disposable test projects
19
+ Production schema may diverge from local (renamed tables,
20
+ columns, migrations). Local is the single source of truth
21
+ during development.
33
22
  ==========================================================
34
23
  ```
35
24
 
36
25
  ## Setup
37
26
 
38
- ### 1. Get Your Supabase Connection Details
39
-
40
- From your Supabase Dashboard > Project Settings > API:
41
- - **Project URL**: `https://xxxxxxxxxxxx.supabase.co`
42
- - **Service Role Key**: `eyJhbGc...` (Settings > API > service_role key)
43
-
44
- For local Supabase (`supabase start`):
45
- - **Project URL**: `http://127.0.0.1:54321`
46
- - **Service Role Key**: Output from `supabase status`
47
-
48
- ### 2. Configure Claude Desktop / Claude Code
49
-
50
- Add the Supabase MCP server to your configuration.
51
-
52
- **Claude Desktop** (`claude_desktop_config.json`):
53
-
54
- ```json
55
- {
56
- "mcpServers": {
57
- "supabase": {
58
- "command": "npx",
59
- "args": [
60
- "-y",
61
- "@supabase/mcp-server-supabase@latest",
62
- "--supabase-url",
63
- "https://xxxxxxxxxxxx.supabase.co",
64
- "--supabase-service-role-key",
65
- "eyJhbGc...",
66
- "--read-only"
67
- ]
68
- }
69
- }
70
- }
71
- ```
27
+ ### 1. Install Supabase CLI
72
28
 
73
- **Claude Code** (`.claude/settings.local.json`):
74
-
75
- ```json
76
- {
77
- "mcpServers": {
78
- "supabase": {
79
- "command": "npx",
80
- "args": [
81
- "-y",
82
- "@supabase/mcp-server-supabase@latest",
83
- "--supabase-url",
84
- "https://xxxxxxxxxxxx.supabase.co",
85
- "--supabase-service-role-key",
86
- "eyJhbGc...",
87
- "--read-only"
88
- ]
89
- }
90
- }
91
- }
29
+ ```bash
30
+ npm install -g supabase
31
+ # or use npx (no global install needed)
32
+ npx supabase --version
92
33
  ```
93
34
 
94
- ### 3. Default: Read-Only Mode
95
-
96
- The `--read-only` flag is included by default. In this mode:
97
-
98
- | Operation | Allowed |
99
- |-----------|---------|
100
- | SELECT queries | Yes |
101
- | DESCRIBE / schema inspection | Yes |
102
- | LIST tables, policies, indexes | Yes |
103
- | INSERT / UPDATE / DELETE | No |
104
- | CREATE / ALTER / DROP | No |
105
- | Migration creation | No |
106
-
107
- To enable write access (development only), remove `--read-only`:
108
-
109
- ```json
110
- {
111
- "mcpServers": {
112
- "supabase": {
113
- "command": "npx",
114
- "args": [
115
- "-y",
116
- "@supabase/mcp-server-supabase@latest",
117
- "--supabase-url",
118
- "http://127.0.0.1:54321",
119
- "--supabase-service-role-key",
120
- "your-local-service-role-key"
121
- ]
122
- }
123
- }
124
- }
35
+ ### 2. Start Local Instance
36
+
37
+ ```bash
38
+ npx supabase start
125
39
  ```
126
40
 
127
- Write mode should ONLY be used with local Supabase or disposable dev projects.
41
+ This starts PostgreSQL, GoTrue (auth), Storage, and other services in Docker containers.
128
42
 
129
- ## Available Tool Groups
43
+ ### 3. Get Connection Details
130
44
 
131
- The Supabase MCP Server exposes these tool groups:
45
+ ```bash
46
+ npx supabase status
47
+ ```
132
48
 
133
- ### Database Tools
49
+ Output includes:
50
+ - **DB URL**: `postgresql://postgres:postgres@127.0.0.1:54322/postgres` (port may vary)
51
+ - **API URL**: `http://127.0.0.1:54321`
52
+ - **anon key** and **service_role key** for local testing
134
53
 
135
- | Tool | Description |
136
- |------|-------------|
137
- | `list_tables` | List all tables in the project |
138
- | `list_extensions` | List installed PostgreSQL extensions |
139
- | `list_migrations` | List applied migrations |
140
- | `apply_migration` | Apply a new SQL migration |
141
- | `execute_sql` | Run arbitrary SQL (read-only by default) |
142
- | `get_migration_status` | Check pending vs applied migrations |
54
+ > **Important:** The port (54322) may vary when running multiple Supabase instances. Always use `npx supabase status` to get the current DB URL — never hardcode it.
143
55
 
144
- ### Auth Tools
56
+ ## Common CLI Commands
145
57
 
146
- | Tool | Description |
147
- |------|-------------|
148
- | `get_auth_config` | View auth provider configuration |
149
- | `list_auth_users` | List authenticated users |
58
+ ### Schema Inspection
150
59
 
151
- ### Storage Tools
60
+ ```bash
61
+ # Full schema dump
62
+ npx supabase db dump --local --schema public
152
63
 
153
- | Tool | Description |
154
- |------|-------------|
155
- | `list_storage_buckets` | List storage buckets |
156
- | `get_storage_config` | View storage configuration |
64
+ # List tables (from dump output)
65
+ npx supabase db dump --local --schema public 2>/dev/null | grep "CREATE TABLE"
157
66
 
158
- ### Project Tools
67
+ # Detailed table schema via psql
68
+ psql $DB_URL -c "SELECT column_name, data_type, is_nullable, column_default \
69
+ FROM information_schema.columns WHERE table_name = 'TABLE_NAME' ORDER BY ordinal_position"
159
70
 
160
- | Tool | Description |
161
- |------|-------------|
162
- | `get_project_config` | View project settings |
163
- | `get_project_api_keys` | View API keys |
71
+ # Foreign key relationships
72
+ psql $DB_URL -c "SELECT tc.table_name, kcu.column_name, ccu.table_name AS foreign_table, \
73
+ ccu.column_name AS foreign_column FROM information_schema.table_constraints tc \
74
+ JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name \
75
+ JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name \
76
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = 'TABLE_NAME'"
164
77
 
165
- ## Usage for Migrations and Schema Management
78
+ # RLS policies
79
+ psql $DB_URL -c "SELECT tablename, policyname, cmd, qual FROM pg_policies WHERE schemaname = 'public'"
166
80
 
167
- ### Inspecting Current Schema
81
+ # Indexes
82
+ psql $DB_URL -c "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'TABLE_NAME'"
83
+ ```
168
84
 
169
- Ask Claude Code to use the MCP tools:
85
+ ### Migrations
170
86
 
171
- ```
172
- "Show me all tables and their RLS policies"
173
- "What indexes exist on the documents table?"
174
- "List all migrations applied so far"
175
- ```
87
+ ```bash
88
+ # Create a new migration
89
+ npx supabase migration new add_status_to_leads
176
90
 
177
- ### Creating Migrations
91
+ # Apply pending migrations to local
92
+ npx supabase migration up --local
178
93
 
179
- With write mode enabled on a local/dev project:
94
+ # List applied migrations
95
+ npx supabase migration list --local
180
96
 
181
- ```
182
- "Create a migration to add a 'tags' column to the documents table"
183
- "Add an RLS policy so only tenant admins can delete documents"
184
- "Enable the pgvector extension and create the embedding column"
97
+ # Reset local database (destructive — re-applies all migrations)
98
+ npx supabase db reset
185
99
  ```
186
100
 
187
- The MCP server will generate and apply SQL migrations through Supabase's migration system.
101
+ ### Data Operations
188
102
 
189
- ### Schema Diffing
103
+ ```bash
104
+ # Run arbitrary SQL against local
105
+ psql $DB_URL -c "SELECT * FROM leads LIMIT 5"
190
106
 
191
- ```
192
- "Compare the current schema against the migration files"
193
- "Show me what would change if I apply the pending migration"
107
+ # Seed data
108
+ npx supabase db seed --local
194
109
  ```
195
110
 
196
111
  ## Usage with MORPH-SPEC Workflow
197
112
 
198
- During MORPH-SPEC phases, the MCP server is useful for:
113
+ During MORPH-SPEC phases, the Supabase CLI is used for:
199
114
 
200
- | Phase | MCP Usage |
201
- |-------|-----------|
202
- | **Phase 2 (Design)** | Inspect existing schema to inform spec |
203
- | **Phase 4 (Tasks)** | Verify migration dependencies |
204
- | **Phase 5 (Implement)** | Apply migrations, verify RLS policies, test queries |
115
+ | Phase | CLI Usage | Commands |
116
+ |-------|-----------|----------|
117
+ | **Phase 2 (Design)** | Inspect existing schema to inform spec | `npx supabase status` → `psql` queries |
118
+ | **Phase 4 (Tasks)** | Verify migration dependencies | `npx supabase migration list --local` |
119
+ | **Phase 5 (Implement)** | Apply migrations, verify RLS, test queries | `npx supabase migration up --local` + `psql` |
120
+ | **Post-Implementation** | Verify RLS policies are correct | `psql` pg_policies queries |
205
121
 
206
122
  ### Example Workflow
207
123
 
208
124
  ```
209
- 1. Design phase: "List current tables and extensions"
125
+ 1. Design phase: `npx supabase status` → `psql $DB_URL` to inspect schema
210
126
  2. Write migration SQL in supabase/migrations/
211
- 3. Apply via MCP: "Apply migration 003_add_search_logs.sql"
212
- 4. Verify: "Show RLS policies on search_logs table"
213
- 5. Test: "Run SELECT * FROM search_logs LIMIT 5"
127
+ 3. Apply: `npx supabase migration up --local`
128
+ 4. Verify: `psql $DB_URL -c "SELECT policyname, cmd FROM pg_policies WHERE tablename = 'search_logs'"`
129
+ 5. Test: `psql $DB_URL -c "SELECT * FROM search_logs LIMIT 5"`
214
130
  ```
215
131
 
216
- ## Security Best Practices
217
-
218
- 1. **Always use `--read-only` unless actively running migrations**
219
- 2. **Never store service_role keys in version control** -- use environment variables or a secrets manager
220
- 3. **Use local Supabase for development** (`supabase start`) instead of cloud projects
221
- 4. **Rotate keys if accidentally exposed** -- Supabase Dashboard > Settings > API > Regenerate
222
- 5. **Restrict MCP to development machines only** -- never configure on CI/CD or shared servers
223
- 6. **Review SQL before applying** -- the MCP server executes SQL with service_role privileges, bypassing all RLS
224
-
225
- ### Environment Variable Alternative
226
-
227
- Instead of hardcoding keys in the config file:
228
-
229
- ```json
230
- {
231
- "mcpServers": {
232
- "supabase": {
233
- "command": "npx",
234
- "args": [
235
- "-y",
236
- "@supabase/mcp-server-supabase@latest",
237
- "--read-only"
238
- ],
239
- "env": {
240
- "SUPABASE_URL": "${SUPABASE_URL}",
241
- "SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_ROLE_KEY}"
242
- }
243
- }
244
- }
245
- }
246
- ```
132
+ ## Best Practices
247
133
 
248
- Set the environment variables in your shell profile or `.env` file (never committed).
134
+ 1. **Always use local Supabase** (`npx supabase start`) — never connect to remote/production
135
+ 2. **Use `npx supabase status`** to detect the DB URL dynamically — port may vary
136
+ 3. **Write migrations as SQL files** in `supabase/migrations/` — apply via CLI
137
+ 4. **Verify RLS after every table change** — missing policies are a CRITICAL security issue
138
+ 5. **Reset local DB when needed** — `npx supabase db reset` re-applies all migrations cleanly
249
139
 
250
140
  ---
251
141
 
@@ -10,9 +10,6 @@ Before using any MCP tool, check if it's available in the current session:
10
10
  // Pattern: Attempt the call — if the tool doesn't exist, Claude Code will report it
11
11
  // There is no "list MCPs" command; just try the most common operation
12
12
 
13
- // Supabase MCP
14
- await mcp__supabase__list_tables();
15
-
16
13
  // GitHub MCP
17
14
  await mcp__github__get_repo();
18
15
 
@@ -21,6 +18,10 @@ await mcp__context7__resolve_library_id({ libraryName: "react" });
21
18
 
22
19
  // Playwright (browser automation)
23
20
  await mcp__playwright__browser_navigate({ url: "https://example.com" });
21
+
22
+ // Supabase — use CLI, not MCP (always target local Docker instance)
23
+ // npx supabase status → get DB URL
24
+ // psql <DB_URL> -c "SELECT ..."
24
25
  ```
25
26
 
26
27
  **Fallback rule:** If an MCP is not available, every phase has a manual alternative using Claude Code native tools (Read, Grep, Glob, Bash).
@@ -45,7 +46,7 @@ const repo = await mcp__github__get_repo();
45
46
  // Glob: "**/{package.json,*.csproj,*.sln,go.mod,Cargo.toml}"
46
47
  ```
47
48
 
48
- ### Phase 1.5 (UI/UX) — Design References
49
+ ### Phase 2 (UI/UX) — Design References
49
50
 
50
51
  | MCP | Use Case | Example |
51
52
  |-----|----------|---------|
@@ -80,46 +81,41 @@ const docs = await mcp__context7__query_docs({
80
81
  // WebFetch for specific component API pages
81
82
  ```
82
83
 
83
- ### Phase 2 (Design) — Schema & Architecture
84
+ ### Phase 3 (Design) — Schema & Architecture
84
85
 
85
- | MCP | Use Case | Example |
86
- |-----|----------|---------|
87
- | **Supabase** | Database schema, tables, relationships, RLS | `mcp__supabase__get_table_schema({ table })` |
88
- | **Database MCPs** | PostgreSQL, MySQL, SQL Server schema | Provider-specific tools |
86
+ | Tool | Use Case | Example |
87
+ |------|----------|---------|
88
+ | **Supabase CLI / psql** | Database schema, tables, relationships, RLS (local Docker) | `psql <DB_URL> -c "SELECT ..."` |
89
89
  | **Context7** | Library docs for architecture decisions | `mcp__context7__query_docs()` |
90
90
  | **GitHub** | Check existing code patterns, PRs | `mcp__github__search_code()` |
91
91
 
92
- ```javascript
93
- // === SCHEMA ANALYSIS (Critical for contracts.cs) ===
92
+ ```bash
93
+ # === SCHEMA ANALYSIS (Critical for contracts.cs) ===
94
+ # Always target local Docker instance — never production.
94
95
 
95
- // 1. List all tables
96
- const tables = await mcp__supabase__list_tables();
96
+ # 0. Get local DB URL (port may vary per instance)
97
+ npx supabase status
98
+ # → Extract "DB URL" line, e.g.: postgresql://postgres:postgres@127.0.0.1:54322/postgres
97
99
 
98
- // 2. Get schema for each relevant table
99
- const schema = await mcp__supabase__get_table_schema({ table: 'leads' });
100
- // → column_name, data_type, is_nullable, column_default
100
+ # 1. List all tables
101
+ npx supabase db dump --local --schema public 2>/dev/null | grep "CREATE TABLE"
101
102
 
102
- // 3. Get foreign key relationships
103
- const rels = await mcp__supabase__get_relationships({ table: 'leads' });
104
- // → foreign_table, foreign_column, constraint_type
103
+ # 2. Get schema for each relevant table
104
+ psql $DB_URL -c "SELECT column_name, data_type, is_nullable, column_default \
105
+ FROM information_schema.columns WHERE table_name = 'leads' ORDER BY ordinal_position"
105
106
 
106
- // 4. Run custom query for complex schema info
107
- const result = await mcp__supabase__query({
108
- query: `SELECT column_name, data_type, is_nullable
109
- FROM information_schema.columns
110
- WHERE table_name = 'leads'
111
- ORDER BY ordinal_position`
112
- });
107
+ # 3. Get foreign key relationships
108
+ psql $DB_URL -c "SELECT tc.table_name, kcu.column_name, ccu.table_name AS foreign_table, \
109
+ ccu.column_name AS foreign_column FROM information_schema.table_constraints tc \
110
+ JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name \
111
+ JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name \
112
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = 'leads'"
113
113
 
114
- // 5. Check RLS policies (security-critical)
115
- const policies = await mcp__supabase__query({
116
- query: `SELECT tablename, policyname, cmd, qual
117
- FROM pg_policies
118
- WHERE tablename = 'leads'`
119
- });
114
+ # 4. Check RLS policies (security-critical)
115
+ psql $DB_URL -c "SELECT tablename, policyname, cmd, qual FROM pg_policies WHERE tablename = 'leads'"
120
116
  ```
121
117
 
122
- **Fallback (no Supabase MCP):**
118
+ **Fallback (local Supabase not running):**
123
119
  ```
124
120
  1. Grep: "\.from\(|\.select\(|SELECT |supabase\.|DbSet<" → find query files
125
121
  2. Read each query file → extract table/column names
@@ -127,7 +123,7 @@ const policies = await mcp__supabase__query({
127
123
  4. Read type files → map properties to database columns
128
124
  ```
129
125
 
130
- ### Phase 3 (Clarify) — Validation & Research
126
+ ### Phase 4 (Clarify) — Validation & Research
131
127
 
132
128
  | MCP | Use Case | Example |
133
129
  |-----|----------|---------|
@@ -145,7 +141,7 @@ const docs = await mcp__context7__query_docs({
145
141
  // Fallback: WebSearch for library capabilities
146
142
  ```
147
143
 
148
- ### Phase 4 (Tasks) — Planning & Organization
144
+ ### Phase 6 (Tasks) — Planning & Organization
149
145
 
150
146
  | MCP | Use Case | Example |
151
147
  |-----|----------|---------|
@@ -167,31 +163,36 @@ for (const task of tasks) {
167
163
  // gh issue create --title "T001: Create Entity Lead" --label "domain"
168
164
  ```
169
165
 
170
- ### Phase 5 (Implement) — Build & Deploy
166
+ ### Phase 7 (Implement) — Build & Deploy
171
167
 
172
- | MCP | Use Case | Example |
173
- |-----|----------|---------|
174
- | **Supabase** | Run migrations, create RLS policies | `mcp__supabase__query()` |
168
+ | Tool | Use Case | Example |
169
+ |------|----------|---------|
170
+ | **Supabase CLI / psql** | Run migrations, create RLS policies (local Docker) | `npx supabase migration up --local` |
175
171
  | **GitHub** | Create PR, push branches | `mcp__github__create_pull_request()` |
176
172
  | **Context7** | Look up API usage during coding | `mcp__context7__query_docs()` |
177
173
  | **Playwright** | Smoke test deployed features, verify UI | `mcp__playwright__browser_navigate()` |
178
174
  | **Vercel** | Deploy, check logs, manage env vars | `mcp__vercel__list_projects()` |
179
- | **Azure** | Provision resources, check deployment status | Provider-specific |
180
- | **Docker** | Build images, manage containers | Provider-specific |
175
+ | **Azure CLI** | Resource management, deployments | `az` commands |
176
+ | **Docker CLI** | Build, run, compose, logs (local) | `docker` commands |
181
177
 
182
- ```javascript
183
- // Run migration after implementing data model
184
- await mcp__supabase__query({
185
- query: `ALTER TABLE leads ADD COLUMN status varchar(20) DEFAULT 'new'`
186
- });
178
+ ```bash
179
+ # === SUPABASE (Migrations & RLS — local Docker) ===
187
180
 
188
- // Create RLS policy for new feature
189
- await mcp__supabase__query({
190
- query: `CREATE POLICY "Users can view own leads"
191
- ON leads FOR SELECT
192
- USING (auth.uid() = user_id)`
193
- });
181
+ # Create migration file
182
+ npx supabase migration new add_status_to_leads
183
+ # → Edit the generated SQL file in supabase/migrations/
194
184
 
185
+ # Apply migration to local instance
186
+ npx supabase migration up --local
187
+
188
+ # Verify schema after migration
189
+ psql $DB_URL -c "SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'leads'"
190
+
191
+ # Verify RLS policies
192
+ psql $DB_URL -c "SELECT policyname, cmd, qual FROM pg_policies WHERE tablename = 'leads'"
193
+ ```
194
+
195
+ ```javascript
195
196
  // Lookup API during implementation
196
197
  const docs = await mcp__context7__query_docs({
197
198
  libraryId: "/dotnet/efcore",
@@ -228,7 +229,7 @@ await mcp__vercel__manage_env_vars({
228
229
  target: ['production', 'preview']
229
230
  });
230
231
 
231
- // Fallback: Bash for migrations, gh CLI for PRs, vercel CLI for deployments
232
+ // Fallback: Bash for gh CLI for PRs, vercel CLI for deployments
232
233
  ```
233
234
 
234
235
  ---
@@ -237,18 +238,18 @@ await mcp__vercel__manage_env_vars({
237
238
 
238
239
  | Need | MCP Tool | Native Alternative |
239
240
  |------|----------|--------------------|
240
- | Database schema | Supabase/DB MCP | Grep queries + Read types |
241
+ | Database schema | Supabase CLI / psql (local Docker) | Grep queries + Read types |
241
242
  | Repo metadata | GitHub MCP | Bash `gh` CLI |
242
243
  | Library docs | Context7 | WebSearch + WebFetch |
243
244
  | Live page preview | Playwright MCP | WebFetch URL |
244
245
  | Page interaction (click, type, navigate) | Playwright MCP | Manual testing |
245
246
  | Responsive layout testing | Playwright MCP (`browser_resize`) | Manual testing |
246
247
  | Console error checking | Playwright MCP (`browser_console_messages`) | Browser DevTools |
247
- | Container ops | Docker MCP | Bash `docker` CLI |
248
- | Cloud resources | Azure MCP | Bash `az` CLI |
248
+ | Container ops | Docker CLI (`docker ps`, `docker logs`, `docker compose`) | — |
249
+ | Cloud resources | Azure CLI (`az resource`, `az deployment`) | — |
249
250
  | Vercel deployments | Vercel MCP | Bash `vercel` CLI |
250
251
 
251
- **Rule:** MCP tools provide structured data (JSON responses). Native tools require manual parsing. **Always prefer MCP when available** — fall back to native when not.
252
+ **Rule:** MCP tools provide structured data (JSON responses). Native tools require manual parsing. **Always prefer MCP when available** — fall back to native when not. **Exceptions:** Supabase, Docker, and Azure always use their respective CLIs directly — never MCP.
252
253
 
253
254
  ---
254
255
 
@@ -333,30 +334,43 @@ await mcp__playwright__browser_file_upload({ ref: "s1e20", paths: ["/path/to/fil
333
334
 
334
335
  | Phase | Use Case | Tool |
335
336
  |-------|----------|------|
336
- | UI/UX (1.5) | Screenshot reference pages for design | `browser_navigate` + `browser_take_screenshot` |
337
- | UI/UX (1.5) | Inspect existing app structure | `browser_navigate` + `browser_snapshot` |
338
- | UI/UX (1.5) | Test responsive layouts | `browser_resize` + `browser_take_screenshot` |
339
- | Clarify (3) | Verify existing UI behavior | `browser_navigate` + `browser_snapshot` |
340
- | Implement (5) | Smoke test deployed features | `browser_navigate` + `browser_click` + `browser_snapshot` |
341
- | Implement (5) | Verify form flows end-to-end | `browser_fill_form` + `browser_click` + `browser_snapshot` |
342
- | Implement (5) | Check console errors after deploy | `browser_navigate` + `browser_console_messages` |
343
- | Implement (5) | Screenshot for recap.md | `browser_take_screenshot` |
337
+ | UI/UX (2) | Screenshot reference pages for design | `browser_navigate` + `browser_take_screenshot` |
338
+ | UI/UX (2) | Inspect existing app structure | `browser_navigate` + `browser_snapshot` |
339
+ | UI/UX (2) | Test responsive layouts | `browser_resize` + `browser_take_screenshot` |
340
+ | Clarify (4) | Verify existing UI behavior | `browser_navigate` + `browser_snapshot` |
341
+ | Implement (7) | Smoke test deployed features | `browser_navigate` + `browser_click` + `browser_snapshot` |
342
+ | Implement (7) | Verify form flows end-to-end | `browser_fill_form` + `browser_click` + `browser_snapshot` |
343
+ | Implement (7) | Check console errors after deploy | `browser_navigate` + `browser_console_messages` |
344
+ | Implement (7) | Screenshot for recap.md | `browser_take_screenshot` |
344
345
 
345
346
  ---
346
347
 
347
- ### Supabase: Full Schema Discovery
348
+ ### Supabase: Full Schema Discovery (Local Docker via CLI)
348
349
 
349
- > **v4 config:** Remote OAuth — `{ "type": "http", "url": "https://mcp.supabase.com/mcp" }`. Authenticate via `/mcp` in Claude Code.
350
+ > **Primary:** Supabase CLI + psql targeting local Docker instance (`npx supabase start`).
351
+ > **Port detection:** Always use `npx supabase status` to get the DB URL — port may vary across instances.
350
352
 
351
- ```javascript
352
- // Complete workflow for Phase 2 schema analysis
353
- const tables = await mcp__supabase__list_tables();
353
+ ```bash
354
+ # Complete workflow for Phase 3 schema analysis
354
355
 
355
- for (const table of tables.filter(t => isRelevant(t))) {
356
- const schema = await mcp__supabase__get_table_schema({ table: table.name });
357
- const rels = await mcp__supabase__get_relationships({ table: table.name });
358
- // → Write findings to schema-analysis.md
359
- }
356
+ # 1. Get local DB URL
357
+ npx supabase status # → extract "DB URL" line
358
+
359
+ # 2. List all tables
360
+ npx supabase db dump --local --schema public 2>/dev/null | grep "CREATE TABLE"
361
+
362
+ # 3. For each relevant table:
363
+ psql $DB_URL -c "SELECT column_name, data_type, is_nullable, column_default \
364
+ FROM information_schema.columns WHERE table_name = 'TABLE_NAME' ORDER BY ordinal_position"
365
+
366
+ # 4. Get relationships
367
+ psql $DB_URL -c "SELECT tc.table_name, kcu.column_name, ccu.table_name AS foreign_table \
368
+ FROM information_schema.table_constraints tc \
369
+ JOIN information_schema.key_column_usage kcu ON tc.constraint_name = kcu.constraint_name \
370
+ JOIN information_schema.constraint_column_usage ccu ON tc.constraint_name = ccu.constraint_name \
371
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = 'TABLE_NAME'"
372
+
373
+ # → Write findings to schema-analysis.md
360
374
  ```
361
375
 
362
376
  ### Context7: Library Research
@@ -393,9 +407,9 @@ const results = await mcp__github__search_code({
393
407
  ## Security Considerations
394
408
 
395
409
  - **Never pass secrets** in MCP tool parameters (API keys, tokens, passwords)
396
- - **Supabase MCP** uses project-level auth — queries run with service role by default
410
+ - **Supabase** uses CLI/psql targeting local Docker — never connect to production
397
411
  - **GitHub MCP** inherits the configured token's permissions
398
- - **Always validate MCP responses** before using in contracts or code generation
412
+ - **Always validate tool responses** before using in contracts or code generation
399
413
 
400
414
  ---
401
415
 
@@ -72,7 +72,6 @@ Snippets will be available in the "MORPH Templates" group. Type the prefix and p
72
72
  |--------|----------|----------------|
73
73
  | `morph-service` | Service class (business logic) | `.cs` |
74
74
  | `morph-repository` | Repository class (data access) | `.cs` |
75
- | `morph-component` | Blazor component | `.razor` |
76
75
  | `morph-migration` | EF Core migration | `.cs` |
77
76
  | `morph-job` | Hangfire background job | `.cs` |
78
77
 
@@ -127,8 +126,8 @@ Snippets will be available in the "MORPH Templates" group. Type the prefix and p
127
126
 
128
127
  ```handlebars
129
128
  // Type: morph-if-else → Tab
130
- {{#if (eq STACK "Blazor")}}
131
- // Blazor-specific code
129
+ {{#if (eq STACK "Nextjs")}}
130
+ // Next.js-specific code
132
131
  {{else}}
133
132
  // Generic code
134
133
  {{/if}}
@@ -207,9 +206,6 @@ Edit `framework/templates/.vscode/morph-templates.code-snippets`:
207
206
  **3. Use Conditional Blocks for Stack-Specific Code**
208
207
 
209
208
  ```handlebars
210
- {{#if (eq STACK "Blazor")}}
211
- @inject NavigationManager Navigation
212
- {{/if}}
213
209
  {{#if (eq STACK "Nextjs")}}
214
210
  import { useRouter } from 'next/navigation';
215
211
  {{/if}}