Annotations can now be persisted to a database table instead of a flat JSON file. Set INSTRUCKT_STORE=database and run the migration:
php artisan vendor:publish --tag=instruckt-migrations
php artisan migrate
Required for hosted and multi-instance environments.
Set INSTRUCKT_SCREENSHOT_DISK=s3 (or any configured Laravel disk) to store screenshots on a remote disk. Screenshots are served via temporary signed URLs so they survive deploys.
Protect the /instruckt/mcp SSE endpoint with a Bearer token:
INSTRUCKT_MCP_TOKEN=your-secret-token
Then add the header in your .mcp.json:
{
"instruckt": {
"url": "https://your-app.com/instruckt/mcp",
"headers": { "Authorization": "Bearer your-secret-token" }
}
}
middleware is now split into api_middleware (annotation CRUD routes) and mcp_middleware (MCP SSE endpoint) for independent control.
instruckt.get_screenshot now returns a proper MCP error response (isError: true) when an annotation has no screenshot or the file is missing, preventing Claude Code from attempting to recover by locating the image via other means.
api_middleware, mcp_middleware, mcp_token, store, and screenshot_disk keys (all have sensible defaults).middleware key still works but is superseded by api_middleware.Add Laravel 13 support
Add configurable toolbar tool visibility — hide individual tools (annotate, screenshot, freeze, etc.) via the tools config array. (PR #4 by @JonPurvis)
instruckt:install now prefers injecting the instruckt/vite plugin into vite.config.* with server: false (Laravel owns the backend), and adds a simple import 'virtual:instruckt' to app.jsinstruckt:uninstall updated to clean up Vite plugin injection, virtual imports, and all legacy injection patternsSourceResolver class resolves Livewire component names to PHP class files and line numbers using ReflectionClassStore::createAnnotation() automatically enriches annotations with source_file, source_line, class_name, and render_lineTrackBladeViews middleware injects a JSON script tag listing all rendered Blade views per requestPOST /instruckt/resolve-source endpoint for resolving source info on demandabort() which threw uncaught HttpException in the stdio contextStore::updateAnnotation() returns null instead of aborting; MCP tools handle gracefullyInstallCommand now always includes 'blade' in the adapters list alongside any JS framework adapterFull Changelog: https://github.com/joshcirre/instruckt-laravel/compare/v0.4.17...v0.4.18
How can I help you explore Laravel packages today?