Summary
Create a dedicated MCP consent page that users land on when an external MCP agent (Claude Desktop, Cursor, Claude Code) initiates the OAuth2 PKCE flow. The page should clearly communicate what the agent is requesting and let the user approve or deny.
Prerequisites
Requirements
Route
- New Vue route at
/account/request/:id/mcp with layout: 'modal', following the existing /account/request/:id and /account/request/:id/editor pattern in frontend/src/pages/account/routes.js
- New component
AccessRequestMCP.vue in frontend/src/pages/account/
Consent page content
- Clearly identify that an MCP agent is requesting access to the user's FlowFuse account
- Display the scope/permissions being requested in user-friendly terms (e.g. "read your teams and instances," "create and modify resources," "delete resources") based on the scope parameter from the OAuth request
- Approve button: redirects to
/account/complete/:id (same as existing pattern)
- Deny button: redirects to
/account/reject/:id (same as existing pattern)
Design
- Follow the existing
AccessRequest.vue component structure and styling conventions
- Use existing FlowFuse UI components (
ff-button, icons, etc.)
- Modal layout consistent with the other access request pages
Tests
- Page renders correctly with scope information
- Approve button redirects to the complete endpoint
- Deny button redirects to the reject endpoint
- Route is accessible and uses modal layout
References
Summary
Create a dedicated MCP consent page that users land on when an external MCP agent (Claude Desktop, Cursor, Claude Code) initiates the OAuth2 PKCE flow. The page should clearly communicate what the agent is requesting and let the user approve or deny.
Prerequisites
/account/authorize)Requirements
Route
/account/request/:id/mcpwithlayout: 'modal', following the existing/account/request/:idand/account/request/:id/editorpattern infrontend/src/pages/account/routes.jsAccessRequestMCP.vueinfrontend/src/pages/account/Consent page content
/account/complete/:id(same as existing pattern)/account/reject/:id(same as existing pattern)Design
AccessRequest.vuecomponent structure and styling conventionsff-button, icons, etc.)Tests
References
frontend/src/pages/account/AccessRequest.vuefrontend/src/pages/account/routes.js:27-41/account/authorizeredirects here formcp-agentclients)