diff --git a/surfsense_web/components/assistant-ui/connector-popup.tsx b/surfsense_web/components/assistant-ui/connector-popup.tsx
index 84361e25b..66333a9ef 100644
--- a/surfsense_web/components/assistant-ui/connector-popup.tsx
+++ b/surfsense_web/components/assistant-ui/connector-popup.tsx
@@ -123,8 +123,9 @@ export const ConnectorIndicator = forwardRef
) : viewingMCPList ? (
-
+ handleDisconnectFromList(connector, () => refreshConnectors())}
+ onAddAccount={handleAddNewMCPFromList}
+ addButtonText="Add New MCP Server"
+ />
) : viewingAccountsType ? (
- {
+ handleDisconnectFromList(connector, () => refreshConnectors())}
+ onAddAccount={() => {
// Check both OAUTH_CONNECTORS and COMPOSIO_CONNECTORS
const oauthConnector =
OAUTH_CONNECTORS.find(
diff --git a/surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-edit-view.tsx b/surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-edit-view.tsx
index 16e7bd0d5..44461c351 100644
--- a/surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-edit-view.tsx
+++ b/surfsense_web/components/assistant-ui/connector-popup/connector-configs/views/connector-edit-view.tsx
@@ -17,6 +17,7 @@ import { SummaryConfig } from "../../components/summary-config";
import { VisionLLMConfig } from "../../components/vision-llm-config";
import { LIVE_CONNECTOR_TYPES, getReauthEndpoint } from "../../constants/connector-constants";
import { getConnectorDisplayName } from "../../tabs/all-connectors-tab";
+import { MCPServiceConfig } from "../components/mcp-service-config";
import { type ConnectorConfigProps, getConnectorConfigComponent } from "../index";
interface ConnectorEditViewProps {
@@ -110,10 +111,7 @@ export const ConnectorEditView: FC = ({
// Get connector-specific config component (MCP-backed connectors use a generic view)
const ConnectorConfigComponent = useMemo(() => {
- if (isMCPBacked) {
- const { MCPServiceConfig } = require("../components/mcp-service-config");
- return MCPServiceConfig as FC;
- }
+ if (isMCPBacked) return MCPServiceConfig;
return getConnectorConfigComponent(connector.connector_type);
}, [connector.connector_type, isMCPBacked]);
const [isScrolled, setIsScrolled] = useState(false);
diff --git a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts
index a8d395e5c..a9223fee5 100644
--- a/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts
+++ b/surfsense_web/components/assistant-ui/connector-popup/hooks/use-connector-dialog.ts
@@ -1311,6 +1311,25 @@ export const useConnectorDialog = () => {
[editingConnector, searchSpaceId, deleteConnector, cameFromMCPList, setIsOpen]
);
+ const handleDisconnectFromList = useCallback(
+ async (connector: SearchSourceConnector, refreshConnectors: () => void) => {
+ if (!searchSpaceId) return;
+ try {
+ await deleteConnector({ id: connector.id });
+ trackConnectorDeleted(Number(searchSpaceId), connector.connector_type, connector.id);
+ toast.success(`${connector.name} disconnected successfully`);
+ refreshConnectors();
+ queryClient.invalidateQueries({
+ queryKey: cacheKeys.logs.summary(Number(searchSpaceId)),
+ });
+ } catch (error) {
+ console.error("Error disconnecting connector:", error);
+ toast.error("Failed to disconnect connector");
+ }
+ },
+ [searchSpaceId, deleteConnector]
+ );
+
// Handle quick index (index with selected date range, or backend defaults if none selected)
const handleQuickIndexConnector = useCallback(
async (
@@ -1484,6 +1503,7 @@ export const useConnectorDialog = () => {
handleStartEdit,
handleSaveConnector,
handleDisconnectConnector,
+ handleDisconnectFromList,
handleBackFromEdit,
handleBackFromConnect,
handleBackFromYouTube,