* Add workspace MCP settings and token access controls. Ship MCP settings UI, OAuth revoke/list helpers, Passport deploy wiring, and workspace.token:mcp gating so assistants can connect without pulling in welcome/onboarding from the parent epic. Co-authored-by: Cursor <cursoragent@cursor.com> * Type MCP client config shapes instead of string checks. Encode http/config-root on each advanced client and tighten primary client ids so snippet generation does not branch on magic strings. Co-authored-by: Cursor <cursoragent@cursor.com> * Polish MCP settings follow-ups from review. Translate Ukrainian MCP copy, deep-link ChatGPT into connector creation, drop an unused asset and revoke arg, and assert PATs are rejected on the MCP endpoint. Co-authored-by: Cursor <cursoragent@cursor.com> * Harden MCP connected clients, revoke scope, and OAuth consent. List recoverable sessions with live refresh tokens, revoke only PATs, throttle registration alone, and block viewers from authorizing MCP. Co-authored-by: Cursor <cursoragent@cursor.com> * Simplify MCP OAuth route throttling to a single middleware group. Co-authored-by: Cursor <cursoragent@cursor.com> * Allow workspace viewers read-only MCP access with web policy writes. Mirror the web app: MCP connects on view + OAuth mcp:use, write tools enforce createPost/update/delete/manageAccounts/manageTeam, and demotion to Viewer keeps grants. Cover role denials, consent, and disconnect. Co-authored-by: Cursor <cursoragent@cursor.com> * Harden MCP tool authz with shared workspace helpers. Route ApiKey tools through AuthorizesMcpTool, fail closed on null user or policy argument, and resolve the current workspace before mutating. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop redundant string casts on validated request data. Enum::from and validated() fields are already strings, so the casts add noise without changing behavior. Co-authored-by: Cursor <cursoragent@cursor.com> * Show only the current user's MCP connections in settings. Match API keys privacy: list and disconnect your own OAuth clients, not teammates' across the account. Co-authored-by: Cursor <cursoragent@cursor.com> * Cover LoadWorkspaceFromToken gaps and harden AuthorizesMcpTool tests. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop redundant is_string guard before UpdatePostTool find. Co-authored-by: Cursor <cursoragent@cursor.com> * Refactor AppSidebar to always show MCP link and simplify route middleware definition in ai.php. The MCP link is now consistently displayed regardless of the current workspace state, and the route middleware syntax has been streamlined. * Refresh MCP connected clients with Inertia usePoll. Co-authored-by: Cursor <cursoragent@cursor.com> * Bump laravel/mcp to 0.9.1 and add the TryPost server icon. Requires laravel/boost 2.5 for the Icon attribute; expose images/trypost/icon.png on TryPostServer. Co-authored-by: Cursor <cursoragent@cursor.com> * Drop no-op ReflectionClass import in TryPostServerTest. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2.8 KiB
Text
58 lines
2.8 KiB
Text
---
|
|
description: Foundational context, package versions, conventions, replies, docs and git rules
|
|
alwaysApply: true
|
|
---
|
|
|
|
# TryPost — Project Context
|
|
|
|
Laravel + Inertia v3 + Vue 3 + Tailwind v4 application. You are an expert on these specific package versions:
|
|
|
|
- php 8.4, laravel/framework v13
|
|
- inertiajs/inertia-laravel v3, @inertiajs/vue3 v3
|
|
- laravel/cashier v16, laravel/horizon v5, laravel/passport v13
|
|
- laravel/pennant v1, laravel/reverb v1, laravel/socialite v5
|
|
- laravel/wayfinder v0, laravel/ai v0, laravel/boost v2.5, laravel/mcp v0.9
|
|
- laravel/nightwatch v1, laravel/telescope v5, laravel/pail v1, laravel/pint v1, laravel/sail v1
|
|
- laravel/prompts v0
|
|
- pestphp/pest v5, phpunit/phpunit v13
|
|
- vue v3, tailwindcss v4, @laravel/echo-vue v2, laravel-echo v2
|
|
- @laravel/vite-plugin-wayfinder v0
|
|
- eslint v9, prettier v3
|
|
|
|
Documentation for end users lives at https://docs.trypost.it.
|
|
|
|
## Skills activation
|
|
|
|
This project has domain-specific skills in `.claude/skills/` (e.g. `pest-testing`, `inertia-vue-development`, `wayfinder-development`, `laravel-best-practices`, `cashier-stripe-development`, `mcp-development`, `passport-development`, `pennant-development`, `socialite-development`, `medialibrary-development`, `ai-sdk-development`, `configuring-horizon`, `configure-nightwatch`, `tailwindcss-development`, `upgrade-laravel-v13`, `humanizer`). Activate the relevant skill whenever you work in that domain — don't wait until you're stuck.
|
|
|
|
## Conventions
|
|
|
|
- Follow existing code conventions. Check sibling files for structure, approach and naming before creating or editing.
|
|
- In Vue `<DialogFooter>`, primary action button first in markup, then cancel/secondary (see `vue-typescript.mdc` and `CLAUDE.md`).
|
|
- AI agents: prompts live in `resources/views/prompts/`; `instructions()` uses `view(...)->render()` only — never heredocs or inline prompt strings in `app/Ai/Agents/` (see `CLAUDE.md`).
|
|
- Use descriptive names (`isRegisteredForDiscounts`, not `discount()`).
|
|
- Reuse existing components before writing new ones.
|
|
- Stick to existing directory structure. Do not create new base folders without approval.
|
|
- Do not change dependencies without approval.
|
|
|
|
## Verification
|
|
|
|
- Do not create verification scripts or ad-hoc tinker code when tests cover the functionality. Prefer feature/unit tests.
|
|
|
|
## Documentation files
|
|
|
|
- Only create documentation files (`*.md`, READMEs) if explicitly requested by the user.
|
|
|
|
## Frontend bundling
|
|
|
|
- If the user doesn't see a frontend change reflected in the UI, ask them to run `npm run build`, `npm run dev`, or `composer run dev`.
|
|
|
|
## Replies
|
|
|
|
- Be concise. Focus on what matters, skip obvious explanations.
|
|
|
|
## Git
|
|
|
|
- NEVER add `Co-Authored-By` lines to commit messages.
|
|
- NEVER commit, push, or open PRs unless the user explicitly asks.
|
|
- Always create a new branch for feature work before making changes.
|