Repository navigation
ShipKit 5.0.0
ShipKit 5.0.0 replaces Sanctum with Laravel Passport and turns every ShipKit app into an OAuth 2.1 server and an MCP server, so users can connect AI clients such as Claude Code, claude.ai, and ChatGPT, and other apps, to their account with their consent.
Requires shipwithian/shipkit-core 5.0. Upgrading from an earlier release: existing API tokens stop working, because Sanctum tokens mean nothing to Passport. UPGRADE.md has the steps. Starting a new project needs nothing: laravel new my-app --using=shipwithian/shipkit installs the latest release.
Use 5.1.0 or later. 5.0.0 accepted any redirect address when an AI client registered itself, so any site could register under a trusted name such as "Claude" and ask a user for consent. 5.1.0 fixes that and several smaller gaps found in review.
What's new
Passport replaces Sanctum
- The
/api/v1endpoints keep their requests and responses, but issue Passport personal access tokens (longer, signed tokens), require theapiscope on every authenticated route, and identify tokens by a string id. PERSONAL_ACCESS_TOKEN_LIFETIME_DAYS(90 by default) replacesSANCTUM_TOKEN_EXPIRATION.
An OAuth 2.1 server
- Other apps ask a user for access through
/oauth/authorize: sign-in first (with two-factor authentication), then a consent screen in the app's own layout. - Only the authorization-code (PKCE for public clients), refresh-token, and personal-access grants are enabled. Operators create clients with
php artisan passport:client.
Settings → Security
- A new "Personal access tokens" section: create (the secret is shown once), list, and revoke.
- A new "Connected apps" section: approved apps with when each was last used, and a button to disconnect one.
Revocation
- A password reset, on the web or the API, revokes every personal access token and every connected app's tokens. Deleting an account deletes them.
An MCP server at /mcp
- AI clients discover the app's sign-in, register themselves (rate-limited and limited to the
mcp:usescope, so they never reach/api/v1), and connect through the consent screen. - The first tools are
show_my_profile,update_my_profile, andlist_roles. Tools act as the signed-in user, through the same policies, Actions, and Queries as the web app. Personal access tokens work on/mcptoo. - A tool marked
#[IsDestructive]returns a summary and a confirmation token first and acts only on the confirmed call, once per token. A broken business rule reaches the AI client asfield: message. ShareChannelrecords whether a request came from the web, the API, or an AI client in Laravel'sContext.
Setup
composer setupand project creation generate Passport's keys, and a migration creates the personal access client.
For agents and maintainers
shipkit-core 5.0 adds checks and a rule for MCP tools (app/Mcp/Tools/{Feature}), the mcp rule, make:feature --mcp, and planning-skill prompts that ask whether a new feature should be reachable through an AI client. They pass on a project without tools.
Full details: CHANGELOG.md and shipkit-core's changelog.