anil/fast-api-crud
anil/fast-api-crud is a Laravel package for quickly scaffolding CRUD APIs with minimal boilerplate. It streamlines fast API endpoints, controllers, validation, and responses, helping developers ship backend features faster with less repetitive code.
Architecture fit
v3.1.0 is additive — no breaking changes, no deprecations, no migration requirement. It does not resolve the central architectural question, but it does shift the evidence:
HasApiResponse, hooks/contracts/traits, Builder macros, macros, config/enums, and a documented set of "controller properties." That is the vocabulary of a base-controller/trait runtime layer, not a pure code generator. The earlier "probably a generator" hypothesis should be downgraded to "hybrid: generates files and supplies a runtime base layer." That is a meaningful risk increase relative to the prior assessment, because it means the package partially owns the request lifecycle (response shaping, query-param parsing, pagination) even after generation.scaffold MCP tool implies the generator path is real and reachable programmatically — with the important difference that code can now be produced by an agent rather than by a human typing an artisan command. Same output, weaker review gate unless we impose one.The new architecture surface is not the CRUD layer; it is repo-level AI tooling configuration. fast-api:install-ai writes into .claude/, CLAUDE.md / AGENTS.md / .cursor/rules / .github/copilot-instructions.md, and merges JSON into .mcp.json, .cursor/mcp.json, .vscode/mcp.json. That means a Laravel package now edits files that govern every AI tool in the repository, shared with teams who may not be Laravel developers at all. Marked-block idempotency and JSON merge logic reduce but do not eliminate the risk of clobbering bespoke instructions, and the resulting instruction blocks become an unowned, silently-updated agent behavior contract in our codebase.
Integration feasibility
Composer-installable as before. Two new feasibility findings:
Technical risk
Overall still high, with a changed risk profile:
list_controllers, describe_controller, list_routes, model_info, get_config, query_reference, read_reference, search_reference are read-only and genuinely useful. scaffold writes. An LLM with a scaffold tool plus an instruction file authored upstream is a code-provenance problem, not just a code-quality problem.read_reference/search_reference may be local-only — the "dependency-free over stdio" claim suggests yes, but confirm), whether .mcp.json ends up committed with paths/secrets, and whether scaffold respects our file-write and review conventions.Key questions to answer before any code is written
HasApiResponse plus the documented hooks/contracts/traits put in the request path?scaffold MCP tool write files to disk, and can it be disabled or restricted to a sandbox path?install-ai create or modify, and can the instruction blocks be scoped to a subdirectory rather than repo root?read_reference / search_reference strictly local?.mcp.json / .cursor/mcp.json / .vscode/mcp.json entries interact with servers we already register, and is merge behavior reversible?Stack fit
Unchanged for the CRUD layer: reasonable only for greenfield, API-first Laravel services with conventional Laravel CRUD; poor for existing services with established base controllers, repository patterns, or non-standard authorization.
New and separable: the read-only MCP introspection (list_routes, describe_controller, model_info, get_config) plus the reference corpus is a plausible fit for our internal developer-tooling workstream — route/controller/model introspection is something we would otherwise script ourselves. Evaluate that track independently of the CRUD adoption decision. The scaffold tool should be treated as out of scope for any first trial.
Migration path
Still no migration path for existing endpoints, and none should be built. Keep this greenfield-only and bounded. The exit path for generated code remains clean if output is plain Laravel; the exit path for the AI integration is less clean, because installer-written instruction blocks and merged JSON configs will have been adopted by other developers and other tools by the time we decide to leave. Assume uninstall requires a documented cleanup checklist, and write that checklist before the pilot starts.
Compatibility
Pin an exact version and commit hash as before; do not float. Additionally: run install-ai only in a sandbox first and diff the resulting file tree against a clean checkout, so we know precisely what it touches. Treat the markdown skills/agent instructions as code — they go through review and version control like code, and they must not be able to silently change on a composer update.
Sequencing
Mcp/Inspector, and the installer's file-write paths.scaffold disabled.install-ai in a scratch repo, capture the full file diff, verify idempotency by running it twice, and confirm whether existing Cursor/Copilot instructions survive a re-run.Maintenance
Ownership transfer remains the dominant cost, and v3.1.0 increases it. We are now potentially maintaining, in addition to a fork of the CRUD package: an MCP server integration, a set of agent instruction blocks that other teams' tooling depends on, three JSON config files with merge semantics, and a documentation corpus that will drift from our internal conventions the moment we customize anything. Budget a named owner for the AI tooling files specifically — otherwise they become orphaned configuration that nobody dares delete and nobody remembers adding.
Support
No vendor, no commercial support, no community. Unchanged. The documentation-coverage test is a genuine improvement to self-supportability — it means we can read the references instead of the source for many questions — but it does not create an escalation path.
Scaling
If output is plain Laravel, runtime scaling impact is negligible; watch generated index/show actions for N+1s and unbounded result sets. The runtime traits now evidenced make this less certain: if HasApiResponse and the query-param layer sit in the request path, we inherit its query construction and response shaping across every generated endpoint, and tuning means forking. The MCP server is a per-developer stdio process — negligible scaling concern, but it is another local process each engineer runs with filesystem read access to the repo.
Failure modes
install-ai clobbers or conflicts with existing Cursor/Copilot/AGENTS configuration; two teams end up with different effective agent instructions.Ramp-up
Low for Laravel-fluent developers — arguably lower than before, because the reference corpus is now real and test-verified, which removes the "we must write all documentation ourselves" burden for the core CRUD surface. The new burden is governance onboarding: a short, explicit policy on which files are generated, which are upstream-managed, which are ours, and that agent-authored scaffolds require human review. Keep that boundary explicit from the first commit; it is now a three-way boundary (ours / generated / upstream-managed AI config) rather than a two-way one.
Recommendation
Still "evaluate, don't adopt" as a production dependency, but the package is now worth two separate, time-boxed evaluations rather than one low-priority POC.
Approve: (a) the existing ≤2-day greenfield CRUD POC, now explicitly conditioned on confirming the extent of the runtime HasApiResponse / traits layer; and (b) a ≤1-day tooling-only trial of read-only MCP introspection plus the reference set, with scaffold disabled and the installer diffed in a sandbox. Do not introduce the package into existing services, do not let install-ai write to repo-root agent instruction files in shared repositories, and do not adopt either track without an internally owned fork and a named maintainer.
If the CRUD POC does not show a clear, measurable boilerplate reduction including validation and authorization, decline and revisit in two quarters. If the tooling trial shows the introspection tools are useful and the installer is cleanly reversible, it is reasonable to keep the read-only MCP surface as a developer-only convenience — but that is a decision about our tooling, not an endorsement of the package's request-path code.
How can I help you explore Laravel packages today?