@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.
- package/README.md +21 -29
- package/bin/morph-spec.js +41 -24
- package/bin/task-manager.js +962 -1341
- package/bin/validate.js +1 -1
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +10 -11
- package/docs/QUICKSTART.md +15 -15
- package/framework/CLAUDE.md +5 -2
- package/framework/agents/README.md +3 -4
- package/framework/agents/ai-agents/ai-system-architect.md +6 -10
- package/framework/agents/architecture/seo-growth-hacker.md +166 -326
- package/framework/agents/architecture/standards-architect.md +21 -31
- package/framework/agents/backend/dotnet-senior.md +160 -86
- package/framework/agents/backend/ef-modeler.md +2 -6
- package/framework/agents/backend/hangfire-orchestrator.md +8 -9
- package/framework/agents/backend/ms-agent-expert.md +1 -1
- package/framework/agents/frontend/nextjs-expert.md +198 -133
- package/framework/agents/frontend/ui-ux-designer.md +226 -267
- package/framework/agents/infrastructure/infra-architect.md +191 -27
- package/framework/agents/integrations/clerk-auth.md +19 -26
- package/framework/agents/integrations/hangfire-integration.md +1 -4
- package/framework/agents.json +226 -1454
- package/framework/commands/morph-apply.md +4 -4
- package/framework/commands/morph-preflight.md +4 -26
- package/framework/commands/morph-proposal.md +19 -19
- package/framework/commands/morph-status.md +2 -2
- package/framework/commands/morph-troubleshoot.md +6 -13
- package/framework/hooks/README.md +1 -6
- package/framework/hooks/claude-code/post-tool-use/agent-complete.js +122 -0
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
- package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
- package/framework/hooks/claude-code/statusline.py +4 -5
- package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
- package/framework/hooks/shared/compact-restore.js +28 -5
- package/framework/hooks/shared/dispatch-helpers.js +17 -0
- package/framework/hooks/shared/phase-utils.js +4 -8
- package/framework/hooks/shared/state-reader.js +34 -3
- package/framework/phases.json +7 -45
- package/framework/rules/ai-agents-standards.md +15 -0
- package/framework/rules/asaas-standards.md +13 -0
- package/framework/rules/clerk-standards.md +13 -0
- package/framework/rules/csharp-standards.md +8 -4
- package/framework/rules/data-standards.md +18 -0
- package/framework/rules/dotnet-templates.md +87 -0
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/hangfire-standards.md +13 -0
- package/framework/rules/infrastructure-standards.md +27 -16
- package/framework/rules/morph-workflow.md +73 -13
- package/framework/rules/nextjs-standards.md +1 -0
- package/framework/rules/nextjs-templates.md +40 -0
- package/framework/rules/resend-standards.md +12 -0
- package/framework/rules/supabase-standards.md +29 -0
- package/framework/skills/README.md +6 -8
- package/framework/skills/level-0-meta/mcp-registry.json +21 -99
- package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
- package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
- package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
- package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
- package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
- package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
- package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
- package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
- package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
- package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
- package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
- package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
- package/framework/skills/level-1-workflows/README.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
- package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
- package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
- package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
- package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
- package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
- package/framework/squad-templates/backend-only.json +6 -6
- package/framework/squad-templates/frontend-only.json +17 -8
- package/framework/squad-templates/full-stack.json +29 -24
- package/framework/standards/STANDARDS.json +1021 -2338
- package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
- package/framework/standards/backend/dotnet/result-pattern.md +213 -0
- package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
- package/framework/standards/backend/dotnet/scrutor.md +158 -0
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
- package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
- package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
- package/framework/standards/integration/mcp/mcp-tools.md +91 -77
- package/framework/templates/IDE-SNIPPETS.md +2 -6
- package/framework/templates/README.md +709 -814
- package/framework/templates/REGISTRY.json +223 -762
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
- package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
- package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
- package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
- package/framework/templates/code/dotnet/backend/repository.cs +148 -141
- package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
- package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
- package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
- package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
- package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
- package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
- package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
- package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
- package/framework/templates/code/dotnet/jobs/job.cs +21 -17
- package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
- package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
- package/framework/templates/code/dotnet/test.cs +192 -106
- package/framework/templates/context/ARCHITECTURE.md +89 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
- package/framework/templates/context/CONTEXT.md +180 -181
- package/framework/templates/context/design-system.md +342 -211
- package/framework/templates/docs/onboarding.md +2 -3
- package/framework/templates/docs/proposal.md +171 -182
- package/framework/templates/docs/spec.md +1 -3
- package/framework/templates/docs/ui-components.md +0 -72
- package/framework/templates/examples/design-system-examples.md +4 -4
- package/framework/templates/feature/decisions.md +0 -66
- package/framework/templates/feature/recap.md +1 -2
- package/framework/templates/infrastructure/github/README.md +56 -593
- package/framework/templates/integrations/clerk-config.cs +0 -41
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
- package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
- package/framework/templates/project/validate.js +2 -4
- package/framework/templates/ui/design-system.css +1 -1
- package/framework/workflows/README.md +8 -8
- package/framework/workflows/configs/fast-track.json +51 -0
- package/framework/workflows/configs/full.json +68 -0
- package/framework/workflows/configs/standard.json +7 -3
- package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
- package/framework/workflows/docs/enforcement-pipeline.md +18 -19
- package/framework/workflows/docs/full-morph.md +69 -76
- package/framework/workflows/docs/standard.md +49 -44
- package/framework/workflows/docs/ui-refresh.md +1 -1
- package/package.json +3 -3
- package/src/commands/agents/dispatch-agents.js +55 -116
- package/src/commands/context/context-refresh.js +79 -0
- package/src/commands/mcp/mcp-setup.js +28 -6
- package/src/commands/phase/phase-reset.js +1 -1
- package/src/commands/project/doctor.js +10 -32
- package/src/commands/project/init.js +32 -1
- package/src/commands/project/status.js +6 -12
- package/src/commands/scaffold/scaffold.js +131 -0
- package/src/commands/scope/escalate.js +1 -1
- package/src/commands/state/advance-phase.js +15 -29
- package/src/commands/state/state.js +20 -5
- package/src/commands/tasks/task.js +0 -30
- package/src/commands/validation/validate-feature.js +3 -10
- package/src/core/paths/output-schema.js +12 -13
- package/src/core/state/phase-state-machine.js +211 -217
- package/src/core/state/state-manager.js +9 -9
- package/src/lib/agents/agents-manager.js +2 -2
- package/src/lib/agents/output-collector.js +1 -2
- package/src/lib/detectors/design-system-detector.js +4 -4
- package/src/lib/detectors/index.js +1 -11
- package/src/lib/generators/architecture-scanner.js +640 -0
- package/src/lib/generators/context-generator.js +3 -3
- package/src/lib/generators/design-system-generator.js +508 -298
- package/src/lib/generators/index.js +12 -10
- package/src/lib/generators/metadata-extractor.js +386 -387
- package/src/lib/generators/recap-generator.js +4 -4
- package/src/lib/generators/scaffold-generator.js +317 -0
- package/src/lib/generators/settings-generator.js +0 -1
- package/src/lib/phase-chain/phase-validator.js +64 -42
- package/src/lib/stack/stack-profile.js +2 -2
- package/src/lib/standards/digest-builder.js +72 -285
- package/src/lib/tasks/task-parser.js +11 -5
- package/src/lib/validators/architecture/architecture-validator.js +259 -387
- package/src/lib/validators/content/content-validator.js +287 -287
- package/src/lib/validators/css/css-validator.js +340 -352
- package/src/lib/validators/design-system/design-system-validator.js +11 -5
- package/src/lib/validators/packages/package-validator.js +347 -360
- package/src/lib/validators/shared/issue-counter.js +14 -18
- package/src/lib/validators/validation-runner.js +3 -19
- package/src/scripts/setup-infra.js +1 -1
- package/src/utils/agents-installer.js +24 -3
- package/src/utils/file-copier.js +1 -0
- package/src/utils/hooks-installer.js +21 -19
- package/src/utils/skills-installer.js +178 -178
- package/framework/agents/architecture/prompt-engineer.md +0 -195
- package/framework/agents/backend/api-designer.md +0 -106
- package/framework/agents/frontend/blazor-builder.md +0 -229
- package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
- package/framework/agents/infrastructure/azure-architect.md +0 -150
- package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
- package/framework/agents/infrastructure/bicep-architect.md +0 -132
- package/framework/agents/infrastructure/container-specialist.md +0 -137
- package/framework/agents/infrastructure/devops-engineer.md +0 -126
- package/framework/agents/integrations/azure-identity.md +0 -148
- package/framework/agents/quality/code-analyzer.md +0 -239
- package/framework/agents/quality/testing-specialist.md +0 -130
- package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
- package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
- package/framework/index/troubleshooting-index.json +0 -184
- package/framework/rules/testing-standards.md +0 -14
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
- package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
- package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
- package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
- package/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
- package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
- package/framework/standards/architecture/ddd/entities.md +0 -99
- package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
- package/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/framework/standards/backend/api/minimal-api.md +0 -494
- package/framework/standards/backend/api/rest.md +0 -492
- package/framework/standards/backend/authentication/passkeys.md +0 -428
- package/framework/standards/backend/database/ef-core.md +0 -199
- package/framework/standards/backend/database/migrations.md +0 -393
- package/framework/standards/backend/database/repository-patterns.md +0 -528
- package/framework/standards/backend/dotnet/async.md +0 -366
- package/framework/standards/backend/dotnet/core.md +0 -117
- package/framework/standards/backend/dotnet/di.md +0 -439
- package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/framework/standards/context/analytics.md +0 -96
- package/framework/standards/context/bundles.md +0 -110
- package/framework/standards/context/priming.md +0 -78
- package/framework/standards/core/architecture.md +0 -185
- package/framework/standards/core/coding.md +0 -214
- package/framework/standards/core/git-branching-strategy.md +0 -403
- package/framework/standards/core/git.md +0 -185
- package/framework/standards/core/testing.md +0 -295
- package/framework/standards/data/nosql/blob-storage.md +0 -102
- package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/framework/standards/frontend/blazor/state.md +0 -191
- package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
- package/framework/standards/infrastructure/azure/azure.md +0 -624
- package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
- package/framework/standards/integration/api/graphql.md +0 -91
- package/framework/standards/integration/api/grpc.md +0 -114
- package/framework/standards/integration/api/rest-design.md +0 -95
- package/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/framework/standards/observability/logging.md +0 -131
- package/framework/standards/observability/metrics.md +0 -121
- package/framework/standards/observability/monitoring.md +0 -114
- package/framework/standards/observability/tracing.md +0 -132
- package/framework/standards/workflows/parallel-execution.md +0 -112
- package/framework/standards/workflows/thread-management.md +0 -113
- package/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
- package/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/framework/templates/infrastructure/azure/README.md +0 -286
- package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/framework/templates/project-structure/dotnet-ddd.md +0 -70
- package/framework/templates/saas/subscription.cs +0 -347
- package/framework/templates/saas/tenant.cs +0 -338
- package/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/framework/templates/ui/MudTheme.cs +0 -281
- package/framework/workflows/configs/nodejs-cli.json +0 -40
- package/src/commands/standards/context-budget.js +0 -89
- package/src/lib/standards/index.js +0 -7
- package/src/lib/standards/standards-context-injector.js +0 -302
- package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
- package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
- package/src/lib/validators/blazor/blazor-validator.js +0 -369
- package/src/lib/validators/blazor/index.js +0 -9
|
@@ -1,251 +1,141 @@
|
|
|
1
|
-
# Supabase
|
|
1
|
+
# Supabase Local Development Guide
|
|
2
2
|
|
|
3
3
|
> **Scope:** nextjs-supabase
|
|
4
4
|
> **Layer:** 2 (on keyword)
|
|
5
|
-
> **Keywords:** supabase,
|
|
6
|
-
> **Load When:** supabase
|
|
5
|
+
> **Keywords:** supabase, cli, local, docker, setup, migrations, psql
|
|
6
|
+
> **Load When:** supabase setup keywords detected
|
|
7
7
|
|
|
8
|
-
|
|
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
|
|
14
|
+
NEVER connect to a PRODUCTION Supabase project.
|
|
25
15
|
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
All database operations MUST target the local Docker
|
|
17
|
+
instance started via `npx supabase start`.
|
|
28
18
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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.
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
###
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
41
|
+
This starts PostgreSQL, GoTrue (auth), Storage, and other services in Docker containers.
|
|
128
42
|
|
|
129
|
-
|
|
43
|
+
### 3. Get Connection Details
|
|
130
44
|
|
|
131
|
-
|
|
45
|
+
```bash
|
|
46
|
+
npx supabase status
|
|
47
|
+
```
|
|
132
48
|
|
|
133
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
+
## Common CLI Commands
|
|
145
57
|
|
|
146
|
-
|
|
147
|
-
|------|-------------|
|
|
148
|
-
| `get_auth_config` | View auth provider configuration |
|
|
149
|
-
| `list_auth_users` | List authenticated users |
|
|
58
|
+
### Schema Inspection
|
|
150
59
|
|
|
151
|
-
|
|
60
|
+
```bash
|
|
61
|
+
# Full schema dump
|
|
62
|
+
npx supabase db dump --local --schema public
|
|
152
63
|
|
|
153
|
-
|
|
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
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
78
|
+
# RLS policies
|
|
79
|
+
psql $DB_URL -c "SELECT tablename, policyname, cmd, qual FROM pg_policies WHERE schemaname = 'public'"
|
|
166
80
|
|
|
167
|
-
|
|
81
|
+
# Indexes
|
|
82
|
+
psql $DB_URL -c "SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'TABLE_NAME'"
|
|
83
|
+
```
|
|
168
84
|
|
|
169
|
-
|
|
85
|
+
### Migrations
|
|
170
86
|
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
|
|
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
|
-
|
|
91
|
+
# Apply pending migrations to local
|
|
92
|
+
npx supabase migration up --local
|
|
178
93
|
|
|
179
|
-
|
|
94
|
+
# List applied migrations
|
|
95
|
+
npx supabase migration list --local
|
|
180
96
|
|
|
181
|
-
|
|
182
|
-
|
|
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
|
-
|
|
101
|
+
### Data Operations
|
|
188
102
|
|
|
189
|
-
|
|
103
|
+
```bash
|
|
104
|
+
# Run arbitrary SQL against local
|
|
105
|
+
psql $DB_URL -c "SELECT * FROM leads LIMIT 5"
|
|
190
106
|
|
|
191
|
-
|
|
192
|
-
|
|
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
|
|
113
|
+
During MORPH-SPEC phases, the Supabase CLI is used for:
|
|
199
114
|
|
|
200
|
-
| Phase |
|
|
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
|
|
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:
|
|
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
|
|
212
|
-
4. Verify: "
|
|
213
|
-
5. Test: "
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
|
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
|
|
84
|
+
### Phase 3 (Design) — Schema & Architecture
|
|
84
85
|
|
|
85
|
-
|
|
|
86
|
-
|
|
87
|
-
| **Supabase** | Database schema, tables, relationships, RLS | `
|
|
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
|
-
```
|
|
93
|
-
|
|
92
|
+
```bash
|
|
93
|
+
# === SCHEMA ANALYSIS (Critical for contracts.cs) ===
|
|
94
|
+
# Always target local Docker instance — never production.
|
|
94
95
|
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
99
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
115
|
-
|
|
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 (
|
|
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
|
|
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
|
|
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
|
|
166
|
+
### Phase 7 (Implement) — Build & Deploy
|
|
171
167
|
|
|
172
|
-
|
|
|
173
|
-
|
|
174
|
-
| **Supabase** | Run migrations, create RLS policies | `
|
|
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** |
|
|
180
|
-
| **Docker** | Build
|
|
175
|
+
| **Azure CLI** | Resource management, deployments | `az` commands |
|
|
176
|
+
| **Docker CLI** | Build, run, compose, logs (local) | `docker` commands |
|
|
181
177
|
|
|
182
|
-
```
|
|
183
|
-
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
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
|
|
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/
|
|
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
|
|
248
|
-
| Cloud resources | Azure
|
|
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 (
|
|
337
|
-
| UI/UX (
|
|
338
|
-
| UI/UX (
|
|
339
|
-
| Clarify (
|
|
340
|
-
| Implement (
|
|
341
|
-
| Implement (
|
|
342
|
-
| Implement (
|
|
343
|
-
| Implement (
|
|
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
|
-
> **
|
|
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
|
-
```
|
|
352
|
-
|
|
353
|
-
const tables = await mcp__supabase__list_tables();
|
|
353
|
+
```bash
|
|
354
|
+
# Complete workflow for Phase 3 schema analysis
|
|
354
355
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
|
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
|
|
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 "
|
|
131
|
-
//
|
|
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}}
|