feat: per-user mcp auth #354
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements #353
Per-User Authentication for MCP (Model Context Protocol) servers, allowing individual users to provide their own credentials (via OAuth) for shared or private MCP servers.
Core Functionality
per_user_authflag to MCP servers. When enabled, the system manages separate client instances and OAuth sessions for each user.user_ids in the database.tool_infocolumn to the MCP server table to cache available tools, improving performance and allowing the UI to show tools even when a server is disconnected.Backend & Logic
MCPClientsManager: Now generates unique client IDs (e.g.,serverId:userId) for servers requiring per-user auth. It filters tools and statuses based on the current user's session.MCPClient: Enhanced to handle "Authorization Required" states. If a tool call fails due to missing auth, it returns a specific error that triggers an authorization prompt in the UI.mcp_serverandmcp_oauth_sessiontables with the necessary columns and indexes.UI & User Experience
Repository & API
mcpRepository: Updated to handle the newperUserAuthandtoolInfofields.api/mcp/list: Now returnsisAuthorizedstatus for each server relative to the requesting user.