Better Fullstack

Plans, scaffolds and maintains multi-language full-stack projects from a catalogue of parts

By Ibrahim Elkamali (individual) TypeScript Local · stdio Developer tools

49 popularity score ★ 818 ↓ 297/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add better-fullstack -- npx -y create-better-fullstack@latest mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "better-fullstack": {
      "command": "npx",
      "args": [
        "-y",
        "create-better-fullstack@latest",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "better-fullstack": {
      "command": "npx",
      "args": [
        "-y",
        "create-better-fullstack@latest",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "better-fullstack": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "create-better-fullstack@latest",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.better-fullstack]
command = "npx"
args = ["-y", "create-better-fullstack@latest", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user better-fullstack npx -- -y create-better-fullstack@latest mcp

Settings 1

BTS_TELEMETRY_DISABLED Optional: Set to 1 to turn off the anonymous usage telemetry. Any other value turns it on, overriding the saved preference. For telemetry.

What it does

Better Fullstack is a project generator for full-stack apps, and its npm package create-better-fullstack has an mcp subcommand that starts a local stdio MCP server. Through it a coding agent can browse the catalogue of frameworks, databases, auth, API and deploy choices (its makers call them Stack Parts), check that a combination works together, preview the file tree in memory, and then write the project to disk. Generated projects can be in TypeScript, Rust, Python, Go, Java and other ecosystems, or mix several in one repository.

The server also covers what happens after the first scaffold. It reads the bts.jsonc file a generated project keeps, and offers tools to repair config drift, refresh templates, add or remove parts, swap a primary frontend, backend or database, and adopt an older project. Most changes are split into a plan tool that returns a review token and an apply tool that only accepts that unchanged token; applied changes are recorded as recovery points that can be listed, verified and restored.

You get 40 tools in all, generated from a single operations table in apps/cli/src/operations/index.ts, plus four read-only resources like docs://stack-options. You won't find any of them listed in the README. Each operation in the source carries a safety level of read, action or destructive. Seven sit at destructive: pruning recovery points, restoring an old transaction, and five apply steps that overwrite project files. Tool calls also go through the CLI's telemetry wrapper in apps/cli/src/mcp.ts, so official releases report anonymous usage events by default once a notice has been shown.

What it needs

RuntimeNode.js
Runs onmacOS, Windows, Linux

Node.js with npx (or pnpm dlx, yarn dlx or bunx, per the docs' launcher table). The command fetches create-better-fullstack@latest from npm on start. No account or sign-in. Bun is needed only when a generated project picks Bun as its runtime or package manager. Running bfs_check_project needs the toolchains of the generated project (for example Go, Rust or Python) on the machine.

Limits

  • Not covered Write tools never install dependencies or run git. The agent has to run the returned install commands itself.
  • Limit bfs_check_project runs the project's generated targets, and those build tools may write lock files, caches or artifacts.
  • Size cap Template-refresh reviews merge exactly only up to 32 KiB per file. Larger files return metadata and no token.
  • Limit Adopting an older project leaves it marked as unverified lineage, and later template refreshes ask for acknowledgeUnprovenManifestV1.
  • Not covered The lifecycle tools work on projects it generated or adopted (tracked in bts.jsonc), not on arbitrary codebases.
  • Limit The docs' commands use @latest, so the tool set can change between runs.

Write tools never install dependencies or run git: the agent has to run the returned install commands itself. bfs_check_project runs the project's generated targets, and those build tools may write lock files, caches or artifacts. Template-refresh reviews merge exactly only up to 32 KiB per file; larger files return metadata and no token. Adopting an older project leaves it marked as unverified lineage. The lifecycle tools work on projects it generated or adopted (tracked in bts.jsonc), not on arbitrary codebases. The docs' commands use @latest, so the tool set can change between runs.

Who it suits

Suits developers who want an agent to start a new full-stack project from tested templates rather than writing boilerplate, and who will keep extending it through the same generator. It runs locally with no sign-in, but it writes into project folders and one tool runs build commands, so it fits a machine where the agent already has write access to code. Pick something else to work on an existing app that was not made with Better Fullstack, or when you only need a template once: the plain CLI or the web Stack Builder do that without an MCP client.

Tools 40

27 only read, 6 change things, 7 can delete or overwrite. A ? marks an optional parameter.

bfs_get_guidance
Returns the current workflow rules and field meanings, meant to be called first
bfs_get_schema
Lists valid choices for one category or all, optionally for one ecosystemcategory?: stringecosystem?: enum
bfs_list_options
Lists categories, or one category's choices with labels, aliases and CLI flagscategory?: stringecosystem?: enum
bfs_search_options
Finds choices by ID, label or alias across categories and ecosystemsquery: stringecosystem?: enum
bfs_explain_option
Explains what one choice needs, what it excludes and how it fits a stackoption: stringwith?: arrayecosystem?: enum
bfs_list_presets
Lists the curated presets and the choices each one makes
bfs_list_starter_tracks
Lists the editable starter tracks with their Stack Parts and evidenceid?: enumecosystem?: enumevidence?: enumruntime?: enumdeploymentTarget?: enumpackageManager?: enumdatabase?: enumauth?: enumworkspaceShape?: enum
bfs_recommend_stack
Turns a plain-language brief into a stack suggestionbrief: stringecosystem?: enumprojectName?: string
bfs_check_compatibility
Checks a proposed stack and reports adjustments and open problemsecosystem: enumfrontend?: arraybackend?: stringruntime?: stringdatabase?: stringorm?: stringapi?: stringauth?: stringpayments?: stringuiLibrary?: stringcssFramework?: string
bfs_plan_project
Builds a project in memory and returns the file summary without writing
bfs_create_project changes
Writes a new project and its bts.jsonc to disk, without installing or running gitprojectName: stringtargetDir?: string
bfs_get_project_status
Reports how a generated project is recognised, its diagnostics and upgrade stateprojectDir: string
bfs_check_project changes
Runs the project's generated check targets, which may write caches or build outputprojectDir: string
bfs_plan_doctor_fix
Plans a repair of config drift and returns a review tokenprojectDir: string
bfs_apply_doctor_fix changes
Applies a reviewed config repair as one recoverable changeprojectDir: stringreviewToken: string
bfs_plan_gen
Plans a new in-project resource or route with exact file contentsprojectDir: stringkind?: enumname: string
bfs_apply_gen deletes
Writes a reviewed generated resource or routeprojectDir: stringkind?: enumname: stringreviewToken: string
bfs_check_recipes
Checks files owned by recipes without running codeprojectDir: stringname?: string
bfs_get_recipe_history
Links local recipe records to their recovery transactionsprojectDir: string
bfs_get_project_context
Returns a bounded summary of a project's roles, versions and safe actionsprojectDir: string
bfs_plan_registry_add
Plans adding a local capability pack: files, dependencies and metadataprojectDir: stringsource: string
bfs_apply_registry_add deletes
Applies a reviewed local capability pack without running a package managerprojectDir: stringsource: stringreviewToken: string
bfs_plan_part_removal
Plans removing one non-primary capabilityprojectDir: stringtarget: string
bfs_apply_part_removal deletes
Removes a reviewed capability as a recoverable changeprojectDir: stringtarget: stringreviewToken: stringacknowledgeArchitectureChange?: boolean
bfs_plan_project_adoption
Guesses the Stack Parts of an older project without writing anythingprojectDir: string
bfs_confirm_project_adoption changes
Writes an unverified baseline for an older project after reviewprojectDir: stringconfirmationToken: string
bfs_plan_project_update
Sorts template drift for a template refresh and returns a review tokenprojectDir: string
bfs_apply_project_update deletes
Applies a reviewed template refresh to project filesprojectDir: stringreviewToken: stringacknowledgeUnprovenManifestV1?: boolean
bfs_list_project_recovery_points
Lists recovery points with their status and whether restore is safeprojectDir: string
bfs_get_project_recovery_point
Shows and validates one recovery pointprojectDir: stringtransactionId: string
bfs_verify_project_recovery_point
Rechecks one recovery point against its backups and the projectprojectDir: stringtransactionId: string
bfs_prune_project_recovery_points deletes
Previews, then deletes, old recovery points that are eligibleprojectDir: stringolderThanDays?: integerkeep?: integerapply?: booleanreviewToken?: string
bfs_recover_project_transaction deletes
Restores the files of one earlier transactionprojectDir: stringtransactionId: string
bfs_plan_primary_role_replacement
Plans swapping a frontend, backend, mobile or database part for anotherprojectDir: stringtarget: stringreplacement: string
bfs_apply_primary_role_replacement deletes
Applies a reviewed primary part swapprojectDir: stringtarget: stringreplacement: stringreviewToken: stringacknowledgeArchitectureChange?: boolean
bfs_plan_stack_update
Plans broad stack changes against bts.jsonc
bfs_apply_stack_update changes
Applies a reviewed stack change, keeping files the user edited
bfs_plan_addition
Plans adding a Stack Part or deploy targetprojectDir: stringpart?: arrayaddons?: arraywebDeploy?: enumserverDeploy?: enum
bfs_add_feature changes
Applies a reviewed Stack Part or deploy additionprojectDir: stringpart?: arrayaddons?: arraywebDeploy?: enumserverDeploy?: enumpackageManager?: enum
bfs_get_capability_evidence
Returns evidence, maturity and known limits for each optionecosystem?: enumcategory?: stringoptionId?: stringreceiptJson?: string

Resources 4

docs://capability-evidence-levels
The evidence levels (listed, generated, build-verified, runtime-verified) as JSON
docs://compatibility-rules
Which frontend, backend, API and ORM combinations are valid, in Markdown
docs://stack-options
Every option per category for each language, as JSON
docs://getting-started
A short scaffolding guide for agents

Similar servers