Repository navigation
v0.9.0
Security
- Related models without an MCP admin are no longer served unchecked.
related_*andget_*withinclude_relatedpreviously returned every field of a related model that was not registered throughMCPAdminMixin(for example theUserbehind a foreign key, password hash included) to any token that could view the parent. Related models now answer to their admin's view permission, queryset scope, andfields/exclude— the MCP admin, or the default admin site's registration — and models with no admin at all are not served - Inline rows require view permission on the inline.
include_inlinesnow calls the inline's ownhas_view_permission(as the admin change page does) and serializes rows under the inline'sfields/exclude - Object-level permissions are enforced.
get_*,update_*,delete_*,bulk_*,related_*,history_*, anddelete_selectednow callhas_view/change/delete_permission(request, obj)with the target row, so admins that restrict access per object are honored - Deletes no longer cascade past the caller's permissions.
delete_*,bulk_*delete, anddelete_selectedrun the admin'sget_deleted_objects()check and refuse when the cascade reaches related objects the token may not delete, or protected objects - Hidden fields cannot be probed.
list_*filtersandorder_byaccept only MCP-visible fields (plus the primary key) and no reverse relations;autocomplete_*no longer falls back to searching hidden fields;related_*no longer serves a hidden forward relation; and values written to hidden fields are redacted from the admin history thathistory_*returns - Non-superusers manage only their own MCP tokens. In
MCPTokenAdmin(and therefore over MCP), a non-superuser sees, edits, and regenerates only tokens linked to their own user and can link a token only to themselves; previously MCPToken add/change permission was enough to mint or take over a token carrying another user's — including a superuser's — authority confirmation_datacan no longer override theaction,index,select_across, or_selected_actionfields of an admin action request- Inline
fields/exclude/readonly_fieldsnow also apply to inlines that declare a customform
Full changelog: https://7tg.github.io/django-admin-mcp/changelog/