Skip to main content
Glama

BackGen

CI npm version License: MIT

npm downloads GitHub stars

🤖 AI-Ready

BackGen MCP server BackGen MCP server

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 mcp

Or configure your AI tool's MCP client:

{
  "mcpServers": {
    "backgen": {
      "command": "npx",
      "args": ["-y", "@ibrahimkhaled19/backgen", "mcp"]
    }
  }
}

Available MCP tools:

Tool

Description

init_project

Scaffold a new production-ready backend project with chosen ORM, preset, and plugins

add_plugin

Install a plugin (jwt, clerk, stripe, s3, ratelimit, ci-github, dependabot, codeql, docker-registry, release)

remove_plugin

Remove a previously installed plugin

generate_resource

Generate a CRUD resource with fields, relations, validation, and Swagger

generate_seed

Generate a database seed file for a resource

generate_factory

Generate a test factory for a resource

doctor

Validate an existing BackGen project for configuration issues

list_plugins

List all available plugins with descriptions

list_presets

List all available domain presets

project_info

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 dev

Swagger 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 init time, switch later via the manifest

  • SaaS-readysaas-core preset ships Organizations, Memberships, Invitations, RBAC, tenant-scoped queries

  • Hardened by default — helmet, strict CORS, request ID, request timeout, xss + mongo-sanitize, graceful shutdown, /health + /ready, error envelope

  • Plugin System — JWT, Clerk, Stripe, S3, ratelimit via backgen add

  • Resource 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.json tracks 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 dev

Commands

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 domain

Output:

  • 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.json manifest (records project.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 once

Available Plugins:

Plugin

Category

Description

jwt

auth

JWT authentication with refresh tokens

clerk

auth

Clerk auth-as-a-service (conflicts with jwt)

stripe

payment

Stripe checkout, webhooks, customers

s3

storage

AWS S3 upload, download, presigned URLs

ratelimit

production

Per-IP rate limiting with Redis-ready store

ci-github

devops

GitHub Actions CI pipeline (lint, typecheck, test, build, optional deploy)

dependabot

devops

Automated dependency updates via Dependabot

codeql

devops

CodeQL security analysis on push and schedule

docker-registry

devops

Docker image build and publish to GHCR

release

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 --defaults

healthcare

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 plugins

backgen 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 placeholder

Field 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 10

Output: 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 Product

Output: 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 module

Generated 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 + Swagger

Key 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 Mongoose

backgen sync

Reconcile .backgenrc.json with the project. Regenerates missing plugin files.

backgen sync

backgen mcp

Start BackGen as an MCP server over stdio. Used by AI assistants (Claude, Cursor, VS Code) to scaffold projects programmatically.

backgen mcp

This 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 health

Displays:

  • 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 entries

Checks:

  • 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 pending

What happens:

  • Reads current generatedVersion from .backgenrc.json

  • Loads pending core + plugin migrations

  • Creates backup in .backgen/backups/pre-<version>/

  • Applies migrations in order (semver-sorted)

  • Updates ownership register + generatedVersion in 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 confirmation

What 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-secrets

What happens:

  • Generates two 256-bit random hex secrets via crypto.randomBytes

  • Old .env saved to .env.backup

  • Previous values preserved as comments in the new .env

  • Print 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

framework

BackGen owns fully

Safe to overwrite

framework-editable

Generated but user may customize

Smart merge via migration

shared

Generated skeleton, user extends (e.g. docker-compose)

Migration-aware update

user

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.json

Development

# 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 lint

Test 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 tools
add_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute or relative path to the existing BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'.
pluginYesPlugin 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute or relative path to the BackGen-generated project to diagnose. Defaults to the current working directory. Example: '/home/user/projects/my-api'.
fixNoAuto-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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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').

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'.
resourceYesResource name in PascalCase — must start with an uppercase letter. Examples: 'Product', 'User', 'Appointment'. Must match an existing resource generated by generate_resource.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute 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'.
nameYesResource 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.
fieldsNoComma-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.
relationsNoComma-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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute or relative path to the BackGen-generated project directory. Defaults to the current working directory. Example: '/home/user/projects/my-api'.
countNoNumber 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.
resourceYesResource name in PascalCase — must start with an uppercase letter. Must match an existing resource generated by generate_resource. Examples: 'Product', 'User', 'Appointment'.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute 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'.
ormNoDatabase 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
nameYesProject 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'.
presetNoDomain 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.
defaultsNoUse 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.
skipInstallNoSkip 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

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute 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

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirNoAbsolute 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'.
pluginYesPlugin 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

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 8 tool updatesv1.12.0
    • Changedadd_plugin2 fields changed
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / plugin / description
        Previous 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."
    • Changeddoctor2 fields changed
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / fix / description
        Previous 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)."
    • Changedgenerate_factory3 fields changed
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / resource / description
        Previous 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."
      • changedInput schema / properties / resource / pattern
        Previous value: -"^[a-zA-Z_][a-zA-Z0-9_]*$"New value: +"^[A-Z][a-zA-Z0-9]*$"
    • Changedgenerate_resource4 fields changed
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / fields / description
        Previous 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."
      • changedInput schema / properties / name / description
        Previous 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."
      • changedInput schema / properties / relations / description
        Previous 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."
    • Changedgenerate_seed4 fields changed
      • changedInput schema / properties / count / description
        Previous 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."
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / resource / description
        Previous 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'."
      • changedInput schema / properties / resource / pattern
        Previous value: -"^[a-zA-Z_][a-zA-Z0-9_]*$"New value: +"^[A-Z][a-zA-Z0-9]*$"
    • Changedinit_project6 fields changed
      • changedInput schema / properties / defaults / description
        Previous 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."
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / name / description
        Previous 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'."
      • changedInput schema / properties / orm / description
        Previous 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."
      • changedInput schema / properties / preset / description
        Previous 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."
      • changedInput schema / properties / skipInstall / description
        Previous 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'."
    • Changedproject_info1 field changed
      • changedInput schema / properties / dir / description
        Previous 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'."
    • Changedremove_plugin2 fields changed
      • changedInput schema / properties / dir / description
        Previous 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'."
      • changedInput schema / properties / plugin / description
        Previous 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."
  2. 10 tool updatesv1.11.2
    • First observedadd_plugin
    • First observeddoctor
    • First observedgenerate_factory
    • First observedgenerate_resource
    • First observedgenerate_seed
    • First observedinit_project
    • First observedlist_plugins
    • First observedlist_presets
    • First observedproject_info
    • First observedremove_plugin

TDQS

A4.4/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessResponsive

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Zero-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.
    3
    40
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server providing AI assistants with intelligent Supabase database access, featuring dynamic schema discovery, complete user management, and file storage operations.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Multi-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

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