mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-27 20:56:12 +01:00
🏗️ feat: Dynamic MCP Server Infrastructure with Access Control (#10787)
* Feature: Dynamic MCP Server with Full UI Management * 🚦 feat: Add MCP Connection Status icons to MCPBuilder panel (#10805) * feature: Add MCP server connection status icons to MCPBuilder panel * refactor: Simplify MCPConfigDialog rendering in MCPBuilderPanel --------- Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com> Co-authored-by: Danny Avila <danny@librechat.ai> * fix: address code review feedback for MCP server management - Fix OAuth secret preservation to avoid mutating input parameter by creating a merged config copy in ServerConfigsDB.update() - Improve error handling in getResourcePermissionsMap to propagate critical errors instead of silently returning empty Map - Extract duplicated MCP server filter logic by exposing selectableServers from useMCPServerManager hook and using it in MCPSelect component * test: Update PermissionService tests to throw errors on invalid resource types - Changed the test for handling invalid resource types to ensure it throws an error instead of returning an empty permissions map. - Updated the expectation to check for the specific error message when an invalid resource type is provided. * feat: Implement retry logic for MCP server creation to handle race conditions - Enhanced the createMCPServer method to include retry logic with exponential backoff for handling duplicate key errors during concurrent server creation. - Updated tests to verify that all concurrent requests succeed and that unique server names are generated. - Added a helper function to identify MongoDB duplicate key errors, improving error handling during server creation. * refactor: StatusIcon to use CircleCheck for connected status - Replaced the PlugZap icon with CircleCheck in the ConnectedStatusIcon component to better represent the connected state. - Ensured consistent icon usage across the component for improved visual clarity. * test: Update AccessControlService tests to throw errors on invalid resource types - Modified the test for invalid resource types to ensure it throws an error with a specific message instead of returning an empty permissions map. - This change enhances error handling and improves test coverage for the AccessControlService. * fix: Update error message for missing server name in MCP server retrieval - Changed the error message returned when the server name is not provided from 'MCP ID is required' to 'Server name is required' for better clarity and accuracy in the API response. --------- Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com> Co-authored-by: Danny Avila <danny@librechat.ai>
This commit is contained in:
parent
41c0a96d39
commit
99f8bd2ce6
103 changed files with 7978 additions and 1003 deletions
|
|
@ -75,10 +75,8 @@
|
|||
"com_agents_marketplace_subtitle": "Discover and use powerful AI agents to enhance your workflows and productivity",
|
||||
"com_agents_mcp_description_placeholder": "Explain what it does in a few words",
|
||||
"com_agents_mcp_icon_size": "Minimum size 128 x 128 px",
|
||||
"com_agents_mcp_info": "Add MCP servers to your agent to enable it to perform tasks and interact with external services",
|
||||
"com_agents_mcp_name_placeholder": "Custom Tool",
|
||||
"com_agents_mcp_trust_subtext": "Custom connectors are not verified by LibreChat",
|
||||
"com_agents_mcps_disabled": "You need to create an agent before adding MCPs.",
|
||||
"com_agents_missing_name": "Please type in a name before creating an agent.",
|
||||
"com_agents_missing_provider_model": "Please select a provider and model before creating an agent.",
|
||||
"com_agents_name_placeholder": "Optional: The name of the agent",
|
||||
|
|
@ -536,6 +534,7 @@
|
|||
"com_nav_long_audio_warning": "Longer texts will take longer to process.",
|
||||
"com_nav_maximize_chat_space": "Maximize chat space",
|
||||
"com_nav_mcp_configure_server": "Configure {{0}}",
|
||||
"com_nav_mcp_status_connected": "Connected",
|
||||
"com_nav_mcp_status_connecting": "{{0}} - Connecting",
|
||||
"com_nav_mcp_vars_update_error": "Error updating MCP custom user variables",
|
||||
"com_nav_mcp_vars_updated": "MCP custom user variables updated successfully.",
|
||||
|
|
@ -593,7 +592,6 @@
|
|||
"com_sidepanel_conversation_tags": "Bookmarks",
|
||||
"com_sidepanel_hide_panel": "Hide Panel",
|
||||
"com_sidepanel_manage_files": "Manage Files",
|
||||
"com_sidepanel_mcp_no_servers_with_vars": "No MCP servers with configurable variables.",
|
||||
"com_sidepanel_parameters": "Parameters",
|
||||
"com_sources_agent_file": "Source Document",
|
||||
"com_sources_agent_files": "Agent Files",
|
||||
|
|
@ -631,6 +629,10 @@
|
|||
"com_ui_add_web_search_api_keys": "Add Web Search API Keys",
|
||||
"com_ui_add_mcp": "Add MCP",
|
||||
"com_ui_add_mcp_server": "Add MCP Server",
|
||||
"com_ui_no_mcp_servers": "No MCP servers yet",
|
||||
"com_ui_add_first_mcp_server": "Create your first MCP server to get started",
|
||||
"com_ui_mcp_server_created": "MCP server created successfully",
|
||||
"com_ui_mcp_server_updated": "MCP server updated successfully",
|
||||
"com_ui_add_model_preset": "Add a model or preset for an additional response",
|
||||
"com_ui_add_multi_conversation": "Add multi-conversation",
|
||||
"com_ui_add_special_variables": "Add Special Variables",
|
||||
|
|
@ -691,6 +693,9 @@
|
|||
"com_ui_agents_allow_create": "Allow creating Agents",
|
||||
"com_ui_agents_allow_share": "Allow sharing Agents",
|
||||
"com_ui_agents_allow_use": "Allow using Agents",
|
||||
"com_ui_mcp_servers_allow_create": "Allow users to create MCP servers",
|
||||
"com_ui_mcp_servers_allow_share": "Allow users to share MCP servers",
|
||||
"com_ui_mcp_servers_allow_use": "Allow users to use MCP servers",
|
||||
"com_ui_all": "all",
|
||||
"com_ui_all_proper": "All",
|
||||
"com_ui_analyzing": "Analyzing",
|
||||
|
|
@ -725,7 +730,6 @@
|
|||
"com_ui_authentication": "Authentication",
|
||||
"com_ui_authentication_type": "Authentication Type",
|
||||
"com_ui_auto": "Auto",
|
||||
"com_ui_available_tools": "Available Tools",
|
||||
"com_ui_avatar": "Avatar",
|
||||
"com_ui_azure": "Azure",
|
||||
"com_ui_azure_ad": "Entra ID",
|
||||
|
|
@ -864,10 +868,6 @@
|
|||
"com_ui_delete_confirm_strong": "This will delete <strong>{{title}}</strong>",
|
||||
"com_ui_delete_confirm_prompt_version_var": "This will delete the selected version for \"{{0}}.\" If no other versions exist, the prompt will be deleted.",
|
||||
"com_ui_delete_conversation": "Delete chat?",
|
||||
"com_ui_delete_mcp": "Delete MCP",
|
||||
"com_ui_delete_mcp_confirm": "Are you sure you want to delete this MCP server?",
|
||||
"com_ui_delete_mcp_error": "Failed to delete MCP server",
|
||||
"com_ui_delete_mcp_success": "MCP server deleted successfully",
|
||||
"com_ui_delete_memory": "Delete Memory",
|
||||
"com_ui_delete_not_allowed": "Delete operation is not allowed",
|
||||
"com_ui_delete_preset": "Delete Preset?",
|
||||
|
|
@ -887,6 +887,7 @@
|
|||
"com_ui_deselect_all": "Deselect All",
|
||||
"com_ui_detailed": "Detailed",
|
||||
"com_ui_disabling": "Disabling...",
|
||||
"com_ui_done": "Done",
|
||||
"com_ui_download": "Download",
|
||||
"com_ui_download_artifact": "Download Artifact",
|
||||
"com_ui_download_backup": "Download Backup Codes",
|
||||
|
|
@ -904,9 +905,9 @@
|
|||
"com_ui_edit": "Edit",
|
||||
"com_ui_edit_editing_image": "Editing image",
|
||||
"com_ui_edit_mcp_server": "Edit MCP Server",
|
||||
"com_ui_edit_mcp_server_dialog_description": "Unique Server Identifier: {{serverName}}",
|
||||
"com_ui_edit_memory": "Edit Memory",
|
||||
"com_ui_edit_preset_title": "Edit Preset - {{title}}",
|
||||
"com_ui_edit_server": "Edit {{serverName}}",
|
||||
"com_ui_edit_prompt_page": "Edit Prompt Page",
|
||||
"com_ui_editable_message": "Editable Message",
|
||||
"com_ui_editor_instructions": "Drag the image to reposition • Use zoom slider or buttons to adjust size",
|
||||
|
|
@ -1047,7 +1048,7 @@
|
|||
"com_ui_mcp_initialized_success": "MCP server '{{0}}' initialized successfully",
|
||||
"com_ui_mcp_oauth_cancelled": "OAuth login cancelled for {{0}}",
|
||||
"com_ui_mcp_oauth_timeout": "OAuth login timed out for {{0}}",
|
||||
"com_ui_mcp_server_not_found": "Server not found.",
|
||||
"com_ui_mcp_server": "MCP Server",
|
||||
"com_ui_mcp_servers": "MCP Servers",
|
||||
"com_ui_mcp_update_var": "Update {{0}}",
|
||||
"com_ui_mcp_url": "MCP Server URL",
|
||||
|
|
@ -1109,7 +1110,6 @@
|
|||
"com_ui_oauth_error_missing_code": "Authorization code is missing. Please try again.",
|
||||
"com_ui_oauth_error_missing_state": "State parameter is missing. Please try again.",
|
||||
"com_ui_oauth_error_title": "Authentication Failed",
|
||||
"com_ui_oauth_revoke": "Revoke",
|
||||
"com_ui_oauth_success_description": "Your authentication was successful. This window will close in",
|
||||
"com_ui_oauth_success_title": "Authentication Successful",
|
||||
"com_ui_of": "of",
|
||||
|
|
@ -1154,6 +1154,9 @@
|
|||
"com_ui_quality": "Quality",
|
||||
"com_ui_read_aloud": "Read aloud",
|
||||
"com_ui_redirecting_to_provider": "Redirecting to {{0}}, please wait...",
|
||||
"com_ui_redirect_uri": "Redirect URI",
|
||||
"com_ui_redirect_uri_info": "The redirect URI will be provided after the server is created. Configure it in your OAuth provider settings.",
|
||||
"com_ui_redirect_uri_instructions": "Copy this redirect URI and configure it in your OAuth provider settings.",
|
||||
"com_ui_reference_saved_memories": "Reference saved memories",
|
||||
"com_ui_reference_saved_memories_description": "Allow the assistant to reference and use your saved memories when responding",
|
||||
"com_ui_refresh": "Refresh",
|
||||
|
|
@ -1199,6 +1202,18 @@
|
|||
"com_ui_role_select": "Role",
|
||||
"com_ui_role_viewer": "Viewer",
|
||||
"com_ui_role_viewer_desc": "Can view and use the agent but cannot modify it",
|
||||
"com_ui_mcp_server_role_viewer": "MCP Server Viewer",
|
||||
"com_ui_mcp_server_role_viewer_desc": "Can view and use MCP servers",
|
||||
"com_ui_mcp_server_role_editor": "MCP Server Editor",
|
||||
"com_ui_mcp_server_role_editor_desc": "Can view, use, and edit MCP servers",
|
||||
"com_ui_mcp_server_role_owner": "MCP Server Owner",
|
||||
"com_ui_mcp_server_role_owner_desc": "Full control over MCP servers",
|
||||
"com_ui_mcp_server_delete_confirm": "Are you sure you want to delete this MCP server?",
|
||||
"com_ui_mcp_server_deleted": "MCP server deleted successfully",
|
||||
"com_ui_mcp_title_invalid": "Title can only contain letters, numbers, and spaces",
|
||||
"com_ui_mcp_server_type": "Server Type",
|
||||
"com_ui_mcp_type_streamable_http": "Streamable HTTPS",
|
||||
"com_ui_mcp_type_sse": "SSE",
|
||||
"com_ui_roleplay": "Roleplay",
|
||||
"com_ui_rotate": "Rotate",
|
||||
"com_ui_rotate_90": "Rotate 90 degrees",
|
||||
|
|
@ -1312,8 +1327,6 @@
|
|||
"com_ui_unpin": "Unpin",
|
||||
"com_ui_untitled": "Untitled",
|
||||
"com_ui_update": "Update",
|
||||
"com_ui_update_mcp_error": "There was an error creating or updating the MCP.",
|
||||
"com_ui_update_mcp_success": "Successfully created or updated MCP",
|
||||
"com_ui_upload": "Upload",
|
||||
"com_ui_upload_agent_avatar": "Successfully updated agent avatar",
|
||||
"com_ui_upload_agent_avatar_label": "Upload agent avatar image",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue