backgen-mcp
This server allows AI assistants to scaffold, manage, and extend production-ready Express.js + TypeScript backend projects through natural language commands.
Scaffold new projects — Create a full backend project with your choice of ORM (Prisma, Drizzle, or Mongoose), an optional domain preset (saas-core, healthcare, ecommerce, crm, lms), and sensible defaults for AI-driven use.
Add plugins — Install auth (JWT, Clerk), payments (Stripe), storage (S3), rate limiting, and DevOps tooling (CI/CD, Dependabot, CodeQL, Docker registry, semantic release).
Remove plugins — Cleanly uninstall a previously added plugin, removing its files, dependencies, and manifest entries.
Generate CRUD resources — Create full resource modules (controller, service, repository, validation, routes, tests) with typed fields, relations, and Swagger docs.
Generate seed files — Produce database seed files for a resource with a configurable number of records.
Generate test factories — Create test factories for resources to streamline unit and integration testing.
Run project health checks — Validate Node.js version,
.env, database config, dependencies, and file integrity, with an optional auto-fix mode.List available plugins — Browse all supported plugins with descriptions and categories.
List available presets — Browse all domain presets and their included resources.
Inspect project metadata — Read the
.backgenrc.jsonmanifest to view the project's ORM, installed plugins, versions, and file ownership.
Integrates Clerk authentication as-a-service, including user management and session handling, into generated backend projects.
Configures Dependabot for automated dependency updates in the generated project.
Generates multi-stage Dockerfile and docker-compose configuration for the project, ready for containerized deployment.
Generates a project using Drizzle ORM for database access, with schema definitions and migrations configured.
Sets up GitHub Actions CI pipeline for linting, type checking, testing, and optional deployment in the generated project.
Generates a project using Mongoose ODM for MongoDB, with models and validation set up.
Generates a project using Prisma ORM for database access, with schema and migrations configured out of the box.
Integrates Stripe payments, enabling checkout sessions, webhooks, and customer management in the generated project.
Auto-generates Swagger/OpenAPI documentation for all API endpoints in the generated project.
BackGen
🤖 AI-Ready
BackGen ships a built-in MCP (Model Context Protocol) server that AI assistants (Claude, Cursor, GitHub Copilot, VS Code) can use to scaffold projects on your behalf.
Run via CLI:
backgen mcpOr configure your AI tool's MCP client:
{
"mcpServers": {
"backgen": {
"command": "npx",
"args": ["-y", "@ibrahimkhaled19/backgen", "mcp"]
}
}
}Available MCP tools:
Tool | Description |
| Scaffold a new production-ready backend project with chosen ORM, preset, and plugins |
| Install a plugin (jwt, clerk, stripe, s3, ratelimit, ci-github, dependabot, codeql, docker-registry, release) |
| Remove a previously installed plugin |
| Generate a CRUD resource with fields, relations, validation, and Swagger |
| Generate a database seed file for a resource |
| Generate a test factory for a resource |
| Validate an existing BackGen project for configuration issues |
| List all available plugins with descriptions |
| List all available domain presets |
| Show project metadata from the manifest |
Then just ask: "Scaffold a SaaS backend with Prisma, JWT auth, and Stripe payments"
BackGen is a CLI tool that generates complete Express.js backend projects on Prisma, Drizzle, or Mongoose — with authentication, multi-tenant infrastructure, production hardening, Docker, and testing — all working out of the box.
npx @ibrahimkhaled19/backgen init my-api --orm drizzle
cd my-api
npm run devSwagger docs at http://localhost:3000/docs in under 60 seconds. Pick your ORM, keep everything else.
Related MCP server: Supabase MCP Server
Features
Express + TypeScript — strict mode, ESLint 9 (flat config), Vitest
Multi-ORM — Prisma, Drizzle, or Mongoose. Pick at
inittime, switch later via the manifestSaaS-ready —
saas-corepreset ships Organizations, Memberships, Invitations, RBAC, tenant-scoped queriesHardened by default — helmet, strict CORS, request ID, request timeout, xss + mongo-sanitize, graceful shutdown,
/health+/ready, error envelopePlugin System — JWT, Clerk, Stripe, S3, ratelimit via
backgen addResource Generator — CRUD modules with relations, validation, Swagger
Domain Presets — saas-core, healthcare, SaaS, ecommerce, CRM, LMS — full domain in one command
Seed & Factory Generators — development data and test factories
Docker — multi-stage Dockerfile + docker-compose
Swagger/OpenAPI — auto-generated API documentation
Manifest —
.backgenrc.jsontracks ORM, plugins, versions, and ownership for upgrade/rollback
Quick Start
# Install globally
npm install -g @ibrahimkhaled19/backgen
# Create a project (pick your ORM)
backgen init my-api --orm prisma
backgen init my-api --orm drizzle
backgen init my-api --orm mongoose
# Create a full multi-tenant domain
backgen init my-saas --preset saas-core --defaults
# Add authentication
backgen add jwt
backgen add clerk
# Add production hardening
backgen add ratelimit
# Generate a resource
backgen generate resource Product name:string price:number stock:number
# Start developing
cd my-api
npm run devCommands
backgen init [name]
Generate a new backend project.
backgen init my-api # interactive ORM picker
backgen init my-api --orm prisma # explicit ORM
backgen init my-api --orm drizzle --defaults # Drizzle, non-interactive
backgen init my-api --orm mongoose --skip-install
backgen init my-api --preset saas-core --defaults # full multi-tenant domain
backgen init my-api --preset healthcare # healthcare domainOutput:
Express app with TypeScript strict mode
ORM-specific data layer (Prisma / Drizzle / Mongoose)
Environment validation (Zod)
Swagger/OpenAPI documentation
Docker + docker-compose
Hardened by default: helmet, CORS, request ID, timeout, xss + mongo-sanitize, graceful shutdown, health checks
ESLint 9 + Vitest
.backgenrc.jsonmanifest (recordsproject.orm+ plugins)
No auth by default — choose your auth provider with backgen add.
backgen add [plugin]
Install a plugin. Interactive multi-select if no argument.
backgen add # interactive multi-select
backgen add jwt # JWT authentication
backgen add clerk # Clerk auth-as-a-service
backgen add stripe # Stripe payments
backgen add s3 # AWS S3 storage
backgen add ratelimit # Per-IP / per-user rate limiting
backgen add devops # Install all devops plugins at onceAvailable Plugins:
Plugin | Category | Description |
| auth | JWT authentication with refresh tokens |
| auth | Clerk auth-as-a-service (conflicts with jwt) |
| payment | Stripe checkout, webhooks, customers |
| storage | AWS S3 upload, download, presigned URLs |
| production | Per-IP rate limiting with Redis-ready store |
| devops | GitHub Actions CI pipeline (lint, typecheck, test, build, optional deploy) |
| devops | Automated dependency updates via Dependabot |
| devops | CodeQL security analysis on push and schedule |
| devops | Docker image build and publish to GHCR |
| devops | Semantic release with npm publish and GitHub releases |
Conflict detection: jwt and clerk cannot be installed together.
Domain Presets
Generate a complete domain in one command. Each preset creates multiple resources with relations, auto-installs JWT auth, and wires everything together.
backgen init my-api --preset healthcare
backgen init my-api --preset saas --defaultshealthcare
Patient, Doctor, Appointment, Prescription, MedicalRecord — appointments between patients and doctors, prescriptions linked to patients, medical records per patient.
saas
Organization, Team, Membership, Subscription, Invoice — organizations with teams and memberships, subscriptions with invoices.
ecommerce
Category, Product, Cart, Order, OrderItem, Payment — products in categories, carts with items, orders with line items and payments.
crm
Contact, Company, Deal, Activity — companies with contacts, deals tracked through pipeline, activity logging.
lms
Course, Lesson, Enrollment, Progress, Certificate — courses with lessons, student enrollments, progress tracking, certificates.
backgen remove [plugin]
Remove a plugin. Interactive multi-select if no argument. Supports devops shorthand to remove all devops plugins.
backgen remove # interactive multi-select
backgen remove stripe # remove specific plugin
backgen remove devops # remove all devops pluginsbackgen generate resource <name> [fields...]
Generate a CRUD resource module.
# Interactive
backgen generate resource Product
# Non-interactive
backgen generate resource Product name:string price:number stock:number
# With relations
backgen generate resource Appointment date:datetime status:string \
--relations "doctor:Doctor,patient:Patient"
# With --fields flag
backgen generate resource Product --fields "name:string,price:number"Generated files:
src/modules/product/
product.controller.ts # CRUD endpoints
product.service.ts # business logic
product.repository.ts # database operations
product.validation.ts # Zod schemas
product.types.ts # TypeScript interfaces
product.routes.ts # route definitions + Swagger
product.test.ts # test placeholderField types: string, number, boolean, date, datetime
Relations: doctor:Doctor (belongsTo), patients:Patient (hasMany)
backgen generate seed <resource>
Generate seed data for development.
backgen generate seed Product --count 10Output: prisma/seeds/product.ts (Prisma), db/seeds/product.ts (Drizzle), or seeds/product.ts (Mongoose)
backgen generate factory <resource>
Generate a test factory.
backgen generate factory ProductOutput: src/factories/product.factory.ts
Usage:
import { createProduct } from "./factories/product.factory.js";
const product = await createProduct({ name: "Widget" });backgen generate route [name]
Generate a custom route module with a complete controller, service, validation, types, and route file -- including Swagger annotations. Routes are automatically registered in app.ts with the REGISTER_ROUTES marker.
Use this when you need a custom endpoint that doesn't fit the CRUD pattern (e.g., dashboards, reports, webhooks, custom actions). For standard CRUD, use generate resource instead.
backgen generate route # interactive prompt
backgen generate route reports # generate a /api/reports module
backgen generate route webhooks # generate a /api/webhooks moduleGenerated files:
src/modules/reports/
reports.controller.ts # request handlers
reports.service.ts # business logic
reports.validation.ts # Zod schemas
reports.types.ts # TypeScript interfaces
reports.routes.ts # route definitions + SwaggerKey differences from generate resource:
No database model, repository, or test file
No field specification required
Pure controller/service pattern for custom endpoints
Mounted at
/api/<name>with full Swagger docs
backgen generate migration [name]
Generate a database migration (ORM-aware).
backgen generate migration add-product-table # runs prisma migrate dev / drizzle-kit generate / no-op for Mongoosebackgen sync
Reconcile .backgenrc.json with the project. Regenerates missing plugin files.
backgen syncbackgen mcp
Start BackGen as an MCP server over stdio. Used by AI assistants (Claude, Cursor, VS Code) to scaffold projects programmatically.
backgen mcpThis is the same server exposed via the npx @ibrahimkhaled19/backgen backgen-mcp binary. It registers all 10 MCP tools listed in the AI-Ready section.
backgen health
Show system health information.
backgen healthDisplays:
Node.js version
Platform and architecture
BackGen version
backgen doctor
Check project health with ownership integrity diagnostics.
backgen doctor # health check + ownership audit
backgen doctor --fix # auto-fix missing manifest entriesChecks:
Node.js version (>= 18)
npm availability
.env file
DATABASE_URL
Prisma schema / Drizzle config / Mongoose connection
Dependencies
Package manager version
File integrity — all manifest-tracked files exist on disk
Ownership integrity — framework vs user file classification
backgen upgrade
Upgrade a generated project to the latest template version. Creates a backup, then applies pending migrations sequentially.
backgen upgrade # show pending migrations, prompt before applying
backgen upgrade --yes # skip confirmation, apply all pendingWhat happens:
Reads current
generatedVersionfrom.backgenrc.jsonLoads pending core + plugin migrations
Creates backup in
.backgen/backups/pre-<version>/Applies migrations in order (semver-sorted)
Updates ownership register +
generatedVersionin manifest
backgen rollback
Restore a project to its pre-upgrade state from the most recent backup.
backgen rollback # show latest backup, prompt before restoring
backgen rollback --yes # skip confirmationWhat happens:
Lists available backups in
.backgen/backups/Restores the most recent backup (all tracked files + manifest)
Project returns to exact pre-upgrade state
backgen rotate-secrets
Rotate JWT secrets in the project's .env file. Generates cryptographically secure 256-bit random hex values for JWT_SECRET and JWT_REFRESH_SECRET, backs up the current .env to .env.backup, and writes new values.
All existing tokens are immediately invalidated on next server restart -- users must re-login.
backgen rotate-secretsWhat happens:
Generates two 256-bit random hex secrets via
crypto.randomBytesOld
.envsaved to.env.backupPrevious values preserved as comments in the new
.envPrint summary of changes
Plugin System
Every plugin implements the BackGenPlugin interface:
interface BackGenPlugin {
name: string;
category: string;
description: string;
version: string;
dependencies?: string[];
devDependencies?: string[];
requires?: string[];
conflicts?: string[];
env?: Record<string, string>;
templates: string[];
migrations?: PluginMigration[]; // versioned plugin migration scripts
install(ctx: InstallContext): Promise<void>;
uninstall?(ctx: InstallContext): Promise<void>;
}Plugins can:
Install npm dependencies
Inject environment variables
Register routes in app.ts
Replace existing middleware
Add database models (Prisma / Drizzle / Mongoose)
Carry versioned migrations for own upgrades
Project Manifest
.backgenrc.json tracks plugins, versions, generated version, and file ownership:
{
"version": "1.0.0",
"generatedVersion": "1.9.0",
"project": {
"name": "my-api",
"framework": "express",
"database": "postgresql",
"orm": "prisma",
"preset": "saas-core"
},
"plugins": {
"jwt": {
"version": "1.0.0",
"installedAt": "2026-06-01",
"source": "core"
}
},
"files": {
"src/app.ts": { "owner": "shared", "version": "1.9.0" },
"src/server.ts": { "owner": "framework", "version": "1.9.0" },
"src/config/env.ts": { "owner": "framework-editable", "version": "1.9.0" },
"prisma/schema.prisma": { "owner": "user" },
"src/modules/user/user.service.ts": { "owner": "user" },
"docker-compose.yml": { "owner": "shared", "version": "1.9.0" }
}
}Ownership levels:
Level | Description | Upgrade behavior |
| BackGen owns fully | Safe to overwrite |
| Generated but user may customize | Smart merge via migration |
| Generated skeleton, user extends (e.g. docker-compose) | Migration-aware update |
| User owns entirely | Never touched |
Generated Project Structure
my-api/
├── prisma/ # Prisma ORM only
│ ├── schema.prisma
│ └── seeds/
├── src/db/ # Drizzle ORM only
│ ├── schema/
│ │ └── index.ts
│ └── seeds/
├── src/models/ # Mongoose ORM only
│ └── seeds/
├── src/
│ ├── app.ts # Express app setup
│ ├── server.ts # Server entry point
│ ├── config/
│ │ ├── env.ts # Zod env validation
│ │ ├── database.ts # Prisma client / Drizzle db / Mongoose connection
│ │ └── swagger.ts # Swagger config
│ ├── middleware/
│ │ ├── auth.ts # JWT/Clerk auth
│ │ ├── validate.ts # Zod validation
│ │ ├── error.ts # Global error handler
│ │ └── logger.ts # Request logging
│ ├── modules/
│ │ ├── auth/ # Auth module (if jwt installed)
│ │ ├── stripe/ # Stripe module (if installed)
│ │ └── <resource>/ # Generated resources
│ ├── services/
│ │ └── logger.service.ts # Winston logger
│ ├── utils/
│ │ ├── api-error.ts # Error class
│ │ ├── async-handler.ts # Async wrapper
│ │ └── response.ts # Response formatters
│ └── factories/ # Test factories
├── .env.example
├── .backgenrc.json # Manifest
├── Dockerfile
├── docker-compose.yml
├── package.json
└── tsconfig.jsonDevelopment
# Clone
git clone https://github.com/your-username/backgen.git
cd backgen
# Install
npm install
# Build
npm run build
# Test
npm run test
# Lint
npm run lintTest Suite
277+ tests covering:
CLI help and version
Init: project structure, configs, manifest (all 3 ORMs)
Init with domain presets: preset-specific resources and relations
Init with saas-core preset: multi-tenant organizations, memberships, RBAC
Add plugin: files, routes, env vars, manifest (V4.6 plugin suite)
Generate resource: module files, ORM model, routes, validation
Generate with relations: foreign keys, ORM includes
Seed and factory generators (all 3 ORMs)
Drizzle: schema generation, client setup, codegen
Mongoose: model generation, schema definition, connection
Remove plugin: file + dependency + manifest cleanup
Sync: file restoration
Doctor: health checks, ownership integrity
Upgrade: migration engine, pending detection, backup creation
Rollback: backup listing, file restoration, manifest recovery
Error handling: unknown plugin, non-empty directory
Tech Stack
Layer | Technology |
CLI | Commander.js |
Prompts | Inquirer.js |
Templates | Handlebars |
Spinner | Ora |
Colors | Chalk |
Testing | Vitest |
Linting | ESLint 9 (flat config) |
Language | TypeScript (strict) |
Generated Projects
Layer | Technology |
Framework | Express.js |
Language | TypeScript (strict) |
Database | PostgreSQL |
ORM | Prisma / Drizzle / Mongoose |
Validation | Zod |
Auth | JWT or Clerk |
Payments | Stripe |
Storage | AWS S3 |
Docs | Swagger/OpenAPI |
Logging | Winston + Morgan |
Testing | Vitest |
Deployment | Docker |
BackGen vs Alternatives
Tool | ORM Choice | Auth | Plugin System | Presets | Upgrade Engine | Docs Site |
BackGen | Prisma, Drizzle, Mongoose | JWT, Clerk | ◈ 7+ plugins | 5 domains | ◈ Backup + rollback | — |
NestJS CLI | No (fixed NestJS) | Built-in | ◈ Modules | — | — | ◈ |
Express Generator | No (fixed plain JS) | — | — | — | — | — |
T3 Stack | Prisma | NextAuth | — | — | — | ◈ |
AdonisJS | Lucid ORM | Built-in | ◈ Ace | — | — | ◈ |
LoopBack | Built-in | Built-in | ◈ | — | — | ◈ |
Key differentiators:
◈ ORM-switchable — change Prisma ↔ Drizzle ↔ Mongoose via manifest, not rewrite
◈ Domain presets — healthcare, SaaS, ecommerce, CRM, LMS in one command
◈ Upgrade engine — versioned migrations + backup + rollback for generated projects
◈ Multi-ORM from day one — not locked into one data layer
Roadmap
Version | Focus | Status |
V1 | Foundation | Done |
V2 | Plugin System | Done |
V3 | Resource Generator | Done |
V4 | Domain Presets | Done |
V4.5 | SaaS Essentials | Done |
V4.6 | Production Hardening | Done |
V4.6.1 | Base Hardening Default-On | Done |
V5 | Multi-ORM (Prisma, Drizzle, Mongoose) | Done |
V6 | DevOps & Infrastructure | Done |
V6.1 | Ownership Tracking & Doctor --fix | Done |
V6.2 | Upgrade Engine & Migration Runner | Done |
V6.3 | Backups & Rollback | Done |
V6.4 | Plugin Migrations | Done |
V7 | Upgrade Polish & Diffing | In Progress |
V8 | Schema-First Development | Planned |
V9 | Enterprise Features | Planned |
V10 | Plugin Authoring SDK | Planned |
V11 | Marketplace | Planned |
V12 | AI Context Layer | Planned |
See docs/ROADMAP.md for details.
License
MIT
Available Tools
10 toolsadd_pluginA
Installs a feature plugin into an existing BackGen-generated project. Each plugin injects its own source files (controllers, routes, middleware, services), registers routes in app.ts, adds npm dependencies, injects environment variables into .env, and updates the .backgenrc.json manifest with ownership tracking. Call list_plugins first to see all available options with descriptions and categories. Run doctor afterwards to verify the project is healthy. IMPORTANT: jwt and clerk conflict — they cannot be installed together. The devops shorthand ('ci-github', 'dependabot', 'codeql', 'docker-registry', 'release') installs the full DevOps suite.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the existing BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'. | |
| plugin | Yes | Plugin to install. Categories: auth (jwt, clerk — mutually exclusive, pick one), payment (stripe), storage (s3), production (ratelimit), devops (ci-github, dependabot, codeql, docker-registry, release — install all with backgen add devops). Use list_plugins first to see descriptions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes all actions: injects files, registers routes, adds dependencies, injects env vars, updates manifest. No annotations provided, so description fully covers behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense paragraph, but all sentences are necessary and informative. Slightly more structure (e.g., bullets) could improve scannability, but still concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely describes effects and prerequisites given no output schema. Covers plugin options, conflicts, dir default, and post-step (doctor).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). Description adds value beyond schema by explaining categories, mutual exclusivity, and devops shorthand for the plugin parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool installs a feature plugin into a BackGen-generated project, with specific verb and resource. It distinguishes from siblings like list_plugins and remove_plugin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: call list_plugins first, run doctor afterwards. Warns about jwt/clerk conflict and explains devops shorthand. Provides clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
doctorA
Runs 6 health check categories against a BackGen-generated project and returns a structured pass/fail report for each one. (1) Runtime — Node version >= 18, npm availability. (2) Configuration — .env exists, DATABASE_URL is set, all required env vars from installed plugins are present. (3) Database — Prisma schema / Drizzle config / Mongoose connection string is reachable. (4) Dependencies — package.json deps match installed node_modules, no missing peer deps. (5) File integrity — every file tracked in .backgenrc.json exists on disk with the correct ownership classification (framework vs user). (6) Ownership — all files are properly classified as framework/shared/user, no orphaned plugins. Run this tool BEFORE telling the user that a project is ready to use. Use --fix to auto-resolve missing manifest entries and file ownership issues.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the BackGen-generated project to diagnose. Defaults to the current working directory. Example: '/home/user/projects/my-api'. | |
| fix | No | Auto-fix issues where possible. When true, doctor will regenerate missing manifest entries, fix ownership classifications, and restore tracked files that are missing from disk. Safe to enable — never touches user-owned files (only framework and shared files). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool is non-destructive to user-owned files, stating 'never touches user-owned files — only framework and shared files.' It also explains what --fix does. This is good transparency, though it could mention if any side effects exist beyond the listed fixes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-organized with a numbered list of the 6 checks. The first sentence provides a summary. It is front-loaded and each sentence adds information, though a few minor redundancies exist (e.g., repeated mention of 'ownership').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 categories) and no output schema, the description covers the input parameters, the checks performed, and the --fix behavior. It does not detail the output format beyond 'structured pass/fail report', which is a minor gap. Overall, it provides sufficient context for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds value beyond the schema. For the 'fix' parameter, it clarifies safety ('Safe to enable — never touches user-owned files'). For 'dir', it provides an example path. This helps the agent understand parameter semantics beyond the basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool runs 6 health check categories and returns a structured pass/fail report. It lists each category in detail, making the purpose crystal clear. The tool's name 'doctor' is vague, but the description provides a specific verb and resource, and it is clearly distinguished from sibling tools like 'init_project' or 'generate_resource'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to run this tool before telling the user a project is ready, providing clear context on when to use it. It also mentions the --fix flag for auto-resolving issues. However, it does not explicitly state when not to use it or mention any alternatives, though the sibling tools are unrelated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_factoryA
Creates a test factory file for a resource — a reusable builder that generates valid resource instances with sensible defaults for writing tests. Factories let you create test data in one line (e.g. createProduct({ name: 'Widget' })) instead of manually constructing full objects with required fields, timestamps, and relations every time. The generated factory is ORM-aware: it uses the same schema as your generated resource. Factories are written to src/factories/.factory.ts and use the faker library for realistic default values. Run generate_resource for a resource first — the factory matches its fields. Only PascalCase resource names are valid (e.g. 'Product', not 'product').
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'. | |
| resource | Yes | Resource name in PascalCase — must start with an uppercase letter. Examples: 'Product', 'User', 'Appointment'. Must match an existing resource generated by generate_resource. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does well, detailing output location, use of faker, ORM-awareness, and schema dependency. However, it doesn't mention whether the tool overwrites existing files or has other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, each sentence adds value, and there is no redundancy or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is fairly complete, covering prerequisites, naming, output location, and usage. Minor gap: no mention of overwrite behavior, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds value by reinforcing the PascalCase constraint and providing example usage. It provides context beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a test factory file for a resource, explains what a factory is with an example, and distinguishes from sibling tools like generate_resource by specifying it as a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool (after generate_resource) and provides a naming constraint (PascalCase only), offering clear guidance and preventing common mistakes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_resourceA
Generates a full CRUD module for a resource — controller with 5 REST endpoints (GET /:id, GET /, POST, PATCH /:id, DELETE /:id), service layer with business logic, repository with database operations, Zod validation schemas, TypeScript interfaces, route definitions auto-registered in the Express app with Swagger/OpenAPI docs, and a test file. If fields are not provided, the CLI will prompt interactively (use non-interactive mode by passing fields directly). Relations create foreign key columns in the database and populate the Prisma/Drizzle/Mongoose schema with the correct association types (belongsTo for singular, hasMany for plural relation names). Run add_plugin first if you need auth protection on the generated endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the BackGen-generated project directory where the resource module will be created. Defaults to current working directory. Example: '/home/user/projects/my-api'. | |
| name | Yes | Resource name in PascalCase, 2+ characters, must start with an uppercase letter. Examples: 'Product', 'OrderItem', 'MedicalRecord'. This becomes the module directory name, database table name, and all class/file names. | |
| fields | No | Comma-separated field definitions in "name:type" format. Supported types: string, number, boolean, date. Examples: "name:string,price:number,isActive:boolean" or "email:string,age:number". Can be omitted for interactive mode. | |
| relations | No | Comma-separated relation definitions in "name:RelatedResource" format. Singular names (e.g., "doctor:Doctor") create a belongsTo foreign key. Plural names (e.g., "patients:Patient") create a hasMany inverse. Examples: "doctor:Doctor,patient:Patient" or "category:Category". The related resource must already exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses creation of multiple files, interactive prompting, and relation behavior (belongsTo/hasMany). However, it does not specify whether existing files are overwritten or if the tool has destructive tendencies, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but slightly verbose. It is well-structured with the main purpose first, followed by details on relations and prerequisites. Every sentence adds value, though some consolidation could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains what is generated (endpoints, layers, validation, tests) and how relations work. It also cross-references add_plugin for auth, making the tool self-contained in context. No major gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with clear descriptions for all four parameters. The description adds value by explaining relation semantics (singular vs. plural) and interactive mode, but this is supplemental rather than essential, as the schema already explains the format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Generates' and identifies the resource as a full CRUD module, listing the specific components (controller, service, repository, etc.). It clearly distinguishes itself from sibling tools like add_plugin or generate_factory by focusing on resource generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool (to generate a CRUD module) and provides an alternative instruction: 'Run add_plugin first if you need auth protection.' Also explains interactive vs. non-interactive mode, giving clear guidance on when to provide fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_seedA
Creates a database seed file for a resource — a script that inserts realistic development data into your database so you don't manually populate tables while building features. The seed file is ORM-aware: it outputs to prisma/seeds/.ts for Prisma, db/seeds/.ts for Drizzle, or seeds/.ts for Mongoose. Each seed record uses faker-generated realistic values matching the resource's field types. Run generate_resource first for the resource you want to seed. After generating, you run the seed via 'npm run seed' in the project directory to insert the data. Use count to control how many records to generate — 10 is fine for development, 50-100 for load testing or demo environments. Maximum 1000.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'. | |
| count | No | Number of seed records to generate. Use 5-10 for quick development setups where you just need sample data. Use 50-100 for demo environments, load testing, or populating dropdowns with realistic options. Max 1000. | |
| resource | Yes | Resource name in PascalCase — must start with an uppercase letter. Must match an existing resource generated by generate_resource. Examples: 'Product', 'User', 'Appointment'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses ORM-awareness, output paths, faker usage, prerequisite (generate_resource), and how to run the seed. It does not mention error handling for missing resource or invalid dir, nor idempotency. Overall, it covers key behaviors well with minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of about 150 words, adequately concise but could be better structured (e.g., bullet points for counts, output paths). It front-loads the main action but repeats count guidance. Some sentences could be trimmed for brevity without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers purpose, prerequisite, usage, output paths, and execution steps. It lacks return value description and error scenarios, but overall it is fairly complete for a 3-parameter tool with clear schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The tool description adds little beyond the schema: it repeats count usage and prerequisite for resource but does not introduce new semantic details. The parameter information in description is largely redundant with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: creating a database seed file for a resource with realistic data. It uses specific verbs ('Creates a database seed file') and distinguishes itself by mentioning the prerequisite generate_resource, which is a sibling tool. The purpose is unambiguous and differentiates from other tools like generate_factory implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use after generate_resource, for development or load testing, with count recommendations. However, it does not explicitly state when not to use this tool or compare it to alternatives like generate_factory. The prerequisite is clearly stated, but more explicit guidance on when to choose seed vs factory would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_projectA
Creates a new backend project directory with Express.js + TypeScript strict mode, ORM data layer (Prisma/Drizzle/Mongoose), Zod env validation, Swagger docs, Docker, ESLint, Vitest, and a .backgenrc.json manifest. Run add_plugin afterwards to add auth, payments, storage, rate-limiting, or CI/CD. Run generate_resource to add CRUD modules. Use --preset to generate a full domain (healthcare/saas/ecommerce/crm/lms) with pre-built resources and auto-installed JWT auth in one command. Call list_presets first to see what each domain preset includes. Typical generation takes 10–30 seconds with npm install being the longest step.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the parent directory where the project folder will be created. Defaults to the current working directory. Example: '/home/user/projects' or 'C:\Users\me\projects'. | |
| orm | No | Database ORM. prisma (PostgreSQL/MySQL/SQLite, recommended for relational), drizzle (lightweight SQL, closer-to-SQL control), mongoose (MongoDB, document-oriented). Defaults to prisma if not specified. | prisma |
| name | Yes | Project name — used as the directory name and npm package name. Must start with a letter or number. Hyphens and underscores allowed. Examples: 'my-api', 'saas-backend', 'healthcare-api'. | |
| preset | No | Domain preset that generates multiple pre-wired resources in one command. Auto-installs JWT auth. Call list_presets first to see what each preset includes. Examples: 'saas-core' for multi-tenant orgs, 'healthcare' for patient/doctor/appointment. | |
| defaults | No | Use default options (non-interactive). Recommended for AI use and automation. Set to false only if you want to prompt the user for each choice interactively. | |
| skipInstall | No | Skip npm install. Use true for CI pipelines, quick scaffolding demos, or when you want to install dependencies later manually. When true, remind the user to run 'npm install' before 'npm run dev'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses generation time (10–30 seconds), longest step (npm install), and mentions presets auto-installing JWT. Could be more explicit about overwrite behavior if directory exists, but otherwise transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is informative but slightly verbose; however, every sentence adds value. Well structured with clear flow: what it does, what to run next, special commands. Could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, no output schema), the description covers all necessary context: project contents, post-creation steps, preset usage, and typical duration. Complete enough for an agent to understand the tool's role in the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with adequate descriptions for all 6 parameters. Description adds workflow context but does not significantly enhance parameter meaning beyond what schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it creates a backend project with specific tools (Express.js, TypeScript, ORM, etc.), and distinguishes from sibling tools like add_plugin and generate_resource by naming them and their purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states when to use this tool (create a new project) and when to use siblings (add_plugin for auth/payments, generate_resource for CRUD). Advises calling list_presets first to see domain preset contents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pluginsA
List all available BackGen plugins with their descriptions and categories. Call this first to show the user what features they can add, then call add_plugin with the chosen plugin name. Call list_presets to see domain presets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses that the tool lists plugins and returns descriptions and categories, indicating read-only behavior. It does not mention potential pagination or auth requirements, but for a simple list operation this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey the purpose, usage, and relationship to siblings with no redundancy. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and low complexity, the description fully covers what the tool does, what it returns, and how to use it in a workflow. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so baseline is 4. The description adds no parameter information, but this is appropriate since there are no parameters to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies 'List all available BackGen plugins with their descriptions and categories,' clearly indicating the verb (list), resource (plugins), and data returned. It distinguishes from siblings by naming list_presets and add_plugin.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Call this first to show the user what features they can add, then call add_plugin with the chosen plugin name.' Also mentions list_presets as an alternative for domain presets, providing clear when-to-use and sequence guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsA
List all available domain presets with their pre-built resources and relationships. Each preset generates multiple interconnected resources with database models, CRUD endpoints, and Swagger docs in a single command. Call this first to help the user choose the right domain, then call init_project with --preset to generate it. All presets auto-install JWT authentication and wire resources together with proper foreign keys.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that presets generate multiple interconnected resources with database models, CRUD endpoints, and Swagger docs. It also states that all presets auto-install JWT authentication and wire resources together. Since no annotations are provided, this description fully covers behavioral aspects such as side effects and capabilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences. The first sentence states the core action, the second provides detailed output description, and the third gives usage instructions. Every sentence adds value, and there is no wasted verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (no parameters, no output schema), the description is complete. It explains what the tool returns (list of presets with their generated resources), its role in the workflow, and its integration with init_project. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so the input schema provides no information. The description implicitly confirms that no inputs are needed by stating 'Call this first' without any input requirements. This is sufficient and adds no confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List all available domain presets', which is a specific verb and resource. It clearly distinguishes its role from sibling tools like init_project by explaining that it provides presets for the user to choose before calling init_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Call this first to help the user choose the right domain'. It also provides a clear follow-up action: 'then call init_project with --preset to generate it'. This gives direct guidance on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_infoA
Runs 6-category diagnostics on a BackGen-generated project and returns a structured report covering Node.js version, npm availability, .env configuration, database connection (Prisma/Drizzle/Mongoose), dependency integrity, file ownership classification, and manifest data from .backgenrc.json. Use this BEFORE or AFTER making changes to verify the project is in a valid state. Read-only — never modifies any files. For a focused health check with auto-fix capability, use doctor instead.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Must contain a valid .backgenrc.json file. Example: '/home/user/projects/my-api'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Declaration that the tool is read-only and never modifies files is explicit. With no annotations provided, the description carries the full burden and addresses the key behavioral trait for a diagnostic tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the purpose, include usage guidance, and note read-only nature. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers input, purpose, and usage context well. Lacks detail on the returned report structure beyond listing categories, but given no output schema, this is a minor gap. Still adequately complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the 'dir' parameter with example and default. The description does not add additional meaning beyond what the schema provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it runs 6-category diagnostics on a BackGen-generated project and returns a structured report. It lists specific checks (Node.js version, npm, .env, etc.) and distinguishes itself from sibling tool 'doctor' by noting it is read-only, while doctor has auto-fix capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this tool before or after making changes to verify project state, and directs to 'doctor' for a focused health check with auto-fix. Provides clear when-to-use and when-not-to-use guidance with alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_pluginA
Removes a previously installed plugin from a BackGen-generated project. This is a destructive but safe operation: it deletes plugin-owned source files (controllers, routes, middleware), removes npm dependencies, strips injected environment variables from .env, reverts route registrations in app.ts, and removes the plugin entry from .backgenrc.json. User-owned files are never touched. Only files that the plugin originally installed are affected. Use this to undo an add_plugin command, switch auth providers (e.g. jwt → clerk), or clean up unused features. Run doctor afterwards to verify the project is healthy after removal. Run list_plugins first to see what's currently installed. Use add_plugin if you want to install (not remove) a plugin.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | No | Absolute or relative path to the existing BackGen-generated project directory. Defaults to the current working directory. Must be a valid BackGen project with a .backgenrc.json manifest. Example: '/home/user/projects/my-api'. | |
| plugin | Yes | Plugin to remove. Categories: auth (jwt, clerk — mutually exclusive, safe to swap by removing one then adding the other), payment (stripe), storage (s3), production (ratelimit), devops (ci-github, dependabot, codeql, docker-registry, release — remove all with 'backgen remove devops' shorthand). Use list_plugins first to see which plugins are currently installed in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it details exactly what is deleted (files, npm deps, env vars, route registrations, .backgenrc.json entry) and what is safe (user-owned files untouched). Clearly labels it as destructive but safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but slightly lengthy. However, it is well-structured with front-loaded action, then details, then usage context. Each sentence adds value, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains all behavioral effects, parameter semantics, and provides post-removal guidance (use doctor). Complete for a destructive tool with two parameters and no output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds significant value: explains plugin categories, mutual exclusivity between jwt/clerk, removes all with shorthand, gives an example for dir, and clarifies project validity requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a plugin from a BackGen project, listing specific actions (deletes files, dependencies, env vars) and distinguishes itself from siblings like add_plugin and list_plugins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use (undo add_plugin, switch auth providers, clean up features) and provides pre/post steps (run list_plugins first, run doctor after). Clearly recommends add_plugin as alternative for installation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
8 tool updates
v1.12.0- Changed
add_plugin2 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory (defaults to current working directory)"New value: +"Absolute or relative path to the existing BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / plugin / descriptionPrevious value: -"Plugin name. Options: jwt, clerk, stripe, s3, ratelimit, ci-github, dependabot, codeql, docker-registry, release"New value: +"Plugin to install. Categories: auth (jwt, clerk — mutually exclusive, pick one), payment (stripe), storage (s3), production (ratelimit), devops (ci-github, dependabot, codeql, docker-registry, release — install all with backgen add devops). Use list_plugins first to see descriptions."
- Changed
doctor2 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory"New value: +"Absolute or relative path to the BackGen-generated project to diagnose. Defaults to the current working directory. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / fix / descriptionPrevious value: -"Auto-fix issues where possible"New value: +"Auto-fix issues where possible. When true, doctor will regenerate missing manifest entries, fix ownership classifications, and restore tracked files that are missing from disk. Safe to enable — never touches user-owned files (only framework and shared files)."
- Changed
generate_factory3 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory"New value: +"Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / resource / descriptionPrevious value: -"Resource name (e.g. 'Product')"New value: +"Resource name in PascalCase — must start with an uppercase letter. Examples: 'Product', 'User', 'Appointment'. Must match an existing resource generated by generate_resource." - changed
Input schema / properties / resource / patternPrevious value: -"^[a-zA-Z_][a-zA-Z0-9_]*$"New value: +"^[A-Z][a-zA-Z0-9]*$"
- Changed
generate_resource4 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory"New value: +"Absolute or relative path to the BackGen-generated project directory where the resource module will be created. Defaults to current working directory. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / fields / descriptionPrevious value: -"Fields as \"name:string,price:number,isActive:boolean\""New value: +"Comma-separated field definitions in \"name:type\" format. Supported types: string, number, boolean, date. Examples: \"name:string,price:number,isActive:boolean\" or \"email:string,age:number\". Can be omitted for interactive mode." - changed
Input schema / properties / name / descriptionPrevious value: -"Resource name (PascalCase, e.g. 'Product')"New value: +"Resource name in PascalCase, 2+ characters, must start with an uppercase letter. Examples: 'Product', 'OrderItem', 'MedicalRecord'. This becomes the module directory name, database table name, and all class/file names." - changed
Input schema / properties / relations / descriptionPrevious value: -"Relations as \"doctor:Doctor,patient:Patient\""New value: +"Comma-separated relation definitions in \"name:RelatedResource\" format. Singular names (e.g., \"doctor:Doctor\") create a belongsTo foreign key. Plural names (e.g., \"patients:Patient\") create a hasMany inverse. Examples: \"doctor:Doctor,patient:Patient\" or \"category:Category\". The related resource must already exist."
- Changed
generate_seed4 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"Number of seed records"New value: +"Number of seed records to generate. Use 5-10 for quick development setups where you just need sample data. Use 50-100 for demo environments, load testing, or populating dropdowns with realistic options. Max 1000." - changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory"New value: +"Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / resource / descriptionPrevious value: -"Resource name (e.g. 'Product')"New value: +"Resource name in PascalCase — must start with an uppercase letter. Must match an existing resource generated by generate_resource. Examples: 'Product', 'User', 'Appointment'." - changed
Input schema / properties / resource / patternPrevious value: -"^[a-zA-Z_][a-zA-Z0-9_]*$"New value: +"^[A-Z][a-zA-Z0-9]*$"
- Changed
init_project6 fields changed- changed
Input schema / properties / defaults / descriptionPrevious value: -"Use default options (non-interactive). Recommended for AI use."New value: +"Use default options (non-interactive). Recommended for AI use and automation. Set to false only if you want to prompt the user for each choice interactively." - changed
Input schema / properties / dir / descriptionPrevious value: -"Directory to create the project in (defaults to current working directory)"New value: +"Absolute or relative path to the parent directory where the project folder will be created. Defaults to the current working directory. Example: '/home/user/projects' or 'C:\\Users\\me\\projects'." - changed
Input schema / properties / name / descriptionPrevious value: -"Project name (used as directory name and package name)"New value: +"Project name — used as the directory name and npm package name. Must start with a letter or number. Hyphens and underscores allowed. Examples: 'my-api', 'saas-backend', 'healthcare-api'." - changed
Input schema / properties / orm / descriptionPrevious value: -"Database ORM to use"New value: +"Database ORM. prisma (PostgreSQL/MySQL/SQLite, recommended for relational), drizzle (lightweight SQL, closer-to-SQL control), mongoose (MongoDB, document-oriented). Defaults to prisma if not specified." - changed
Input schema / properties / preset / descriptionPrevious value: -"Domain preset with pre-built resources"New value: +"Domain preset that generates multiple pre-wired resources in one command. Auto-installs JWT auth. Call list_presets first to see what each preset includes. Examples: 'saas-core' for multi-tenant orgs, 'healthcare' for patient/doctor/appointment." - changed
Input schema / properties / skipInstall / descriptionPrevious value: -"Skip npm install (for CI or quick scaffolding)"New value: +"Skip npm install. Use true for CI pipelines, quick scaffolding demos, or when you want to install dependencies later manually. When true, remind the user to run 'npm install' before 'npm run dev'."
- Changed
project_info1 field changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory"New value: +"Absolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Must contain a valid .backgenrc.json file. Example: '/home/user/projects/my-api'."
- Changed
remove_plugin2 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project directory (defaults to current working directory)"New value: +"Absolute or relative path to the existing BackGen-generated project directory. Defaults to the current working directory. Must be a valid BackGen project with a .backgenrc.json manifest. Example: '/home/user/projects/my-api'." - changed
Input schema / properties / plugin / descriptionPrevious value: -"Plugin name to remove"New value: +"Plugin to remove. Categories: auth (jwt, clerk — mutually exclusive, safe to swap by removing one then adding the other), payment (stripe), storage (s3), production (ratelimit), devops (ci-github, dependabot, codeql, docker-registry, release — remove all with 'backgen remove devops' shorthand). Use list_plugins first to see which plugins are currently installed in the project."
10 tool updates
v1.11.2- First observed
add_plugin - First observed
doctor - First observed
generate_factory - First observed
generate_resource - First observed
generate_seed - First observed
init_project - First observed
list_plugins - First observed
list_presets - First observed
project_info - First observed
remove_plugin
TDQS
Most tools have clearly distinct purposes (e.g., init_project, add_plugin, remove_plugin, generate_*). However, doctor and project_info both run 6-category diagnostics with overlapping descriptions, potentially causing confusion for an agent despite doctor having auto-fix capability.
The majority of tools follow a verb_noun pattern in snake_case (add_plugin, generate_resource, list_plugins). Two tools break the pattern: doctor (just a noun) and project_info (noun_noun). This minor inconsistency is manageable.
With 10 tools covering project initialization, plugin management, resource generation, and diagnostics, the count is well-scoped for the server's purpose. Each tool serves a distinct role without unnecessary bloat.
Core workflows are covered: init, add/remove plugins, generate resources/factories/seeds, and diagnostics. A minor gap is the lack of a dedicated tool to list installed plugins (only available through diagnostics/manifest), but this does not significantly hinder typical usage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Backend for vibe coders. Connect Butterbase to any MCP-compatible AI coding tool and provision a full backend automatically — database, authentication, file storage, edge functions, and real-time — from a natural language prompt. No SQL, no configuration, no backend knowledge required. Free to start at butterbase.ai.
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
Related MCP Servers
- AlicenseAqualityDmaintenanceZero-config MCP server that gives AI coding assistants a real-time diagnostic snapshot of your local dev environment. Detects framework, running services, recent errors, git state, and provides a health diagnosis in one call.3401MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready MCP server providing AI assistants with intelligent Supabase database access, featuring dynamic schema discovery, complete user management, and file storage operations.1MIT
- AlicenseNot gradedqualityCmaintenanceGenerates production-ready MCP servers from natural language, OpenAPI specs, database schemas, GraphQL schemas, or ontologies.861MIT
- FlicenseNot gradedqualityDmaintenanceMulti-stack scaffolding engine for generating production-ready module structures (NestJS, Java Spring, Python FastAPI) directly from an MCP-compatible AI client, reducing token usage for boilerplate code.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/IbrahimKhaled19/BackGen'
If you have feedback or need assistance with the MCP directory API, please join our Discord server