---
description: Обязательный порядок MCP перед backend-кодом (Fastify, Drizzle, SQLite)
globs: apps/api/**/*,packages/db/**/*,packages/shared/**/*
alwaysApply: false
---

# Backend MCP — обязательно

Перед **любой** задачей в `apps/api`, `packages/db`, `packages/shared` — сначала MCP, не training data.

## Рекомендуемые MCP для проекта

| Назначение | Где включить |
|------------|--------------|
| Context7 (Fastify, Drizzle, Vitest, Zod) | `.cursor/settings.json` → `context7-plugin` |
| shadcn/ui (экраны с API) | `.cursor/settings.json` → `shadcn` |
| Codegraph (поиск по кодовой базе) | `.cursor/mcp.json` → `codegraph` |
| E2E / smoke UI | Cursor Settings → `cursor-ide-browser` |
| Поиск неизвестного MCP | `user-mcp-on-demand` |

**Cloudflare не использовать** — стек проекта: Docker + Node + SQLite, без Workers.

## Порядок

| Задача | MCP |
|--------|-----|
| Поиск существующего кода | **Codegraph** `codegraph_explore` |
| Fastify plugins, routes, hooks | **Context7** (`fastify`, `@fastify/jwt`, `@fastify/type-provider-zod`) |
| Drizzle schema, queries, migrations | **Context7** (`drizzle-orm`, `drizzle-kit`, `better-sqlite3`) |
| Zod contracts (`packages/shared`) | **Context7** (`zod`) |
| Vitest (`app.inject()`) | **Context7** (`vitest`, `fastify`) |
| API + UI | `packages/shared` → **shadcn MCP** ([`shadcn-mcp.mdc`](shadcn-mcp.mdc)) |
| E2E / smoke UI | **cursor-ide-browser** |
| Неизвестный инструмент | **user-mcp-on-demand** `search_tools` |

## Запрещено

- Угадывать API Fastify/Drizzle из памяти
- Самописные аналоги `@fastify/*` (CORS, static, JWT, rate-limit)
- Дублировать Zod schemas вне `@cfdm/shared`

Связанные: [`backend-fastify.mdc`](backend-fastify.mdc), [`backend-drizzle.mdc`](backend-drizzle.mdc), [`backend-testing.mdc`](backend-testing.mdc).
