Limitations
The things this package deliberately does not do, in one place. Each one links to the chapter that explains why.
Actions
- Action discovery covers the resource's table only: row actions, table header actions, toolbar actions, empty state actions and column actions. Bulk actions aren't discovered, since they act on a record set while an action tool takes a single
id, and neither are page header actions or relation manager actions. Extract the work into an operation and expose it as a custom tool, see sharing the operation. - Only closures whose parameters are limited to
$record,$dataand$argumentscan run headlessly. Anything asking for$livewire,$tableor other page state is skipped at registration, see bridging actions. requiresConfirmation()does nothing over MCP, and an action whose modal schema cannot be built headlessly is skipped rather than exposed without its form, see actions with input.
Writes
- Writes don't run resource page lifecycle hooks (
mutateFormDataBeforeCreateand friends), useMcpResource::mutateDataUsing()instead, see exposing resources. - Repeaters and builders bound to a relationship aren't writable, they save through
saveRelationshipsUsingwhich the write path doesn't run. - Relation tools are read only. A
BelongsToManyexposed on the form as a multiple relationshipSelectis writable, see relations. - A relationship
Select'smodifyQueryUsingnarrowing is not replayed when its keys are checked. Global scopes are, see relationship keys. - Translatable attributes are written one locale at a time, whichever the application is running under, see field types.
Fields and files
- Unknown field types are treated as strings. Teach the package about one with
fieldMapper(), see custom field types. - Image cropping and resizing aren't applied to uploads, those are client-side only in filament, see stored files.
Authentication
- OAuth 2.1 is not supported yet,
McpPlugin::make()->oauth()throws. Use MCP tokens in the meantime.