From 5d3bdf9bcaf199862a40419020c82b2efbd618c0 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Sun, 24 Aug 2025 19:47:33 +0530 Subject: [PATCH] fix: source is not passed to memory tools --- .../app/components/mcp/mcp-sources-stats.tsx | 2 +- .../mcp/virtual-mcp-sessions-list.tsx | 81 +------------------ apps/webapp/app/routes/settings.mcp.tsx | 6 +- apps/webapp/app/services/mcp.server.ts | 44 ++++++---- apps/webapp/app/utils/mcp/memory.ts | 5 +- apps/webapp/app/utils/mcp/session-manager.ts | 1 + 6 files changed, 34 insertions(+), 105 deletions(-) diff --git a/apps/webapp/app/components/mcp/mcp-sources-stats.tsx b/apps/webapp/app/components/mcp/mcp-sources-stats.tsx index f1ffab6..71210ec 100644 --- a/apps/webapp/app/components/mcp/mcp-sources-stats.tsx +++ b/apps/webapp/app/components/mcp/mcp-sources-stats.tsx @@ -78,7 +78,7 @@ export function McpSourcesStats({ - Current Active + Active {activeSources.length === 0 ? ( diff --git a/apps/webapp/app/components/mcp/virtual-mcp-sessions-list.tsx b/apps/webapp/app/components/mcp/virtual-mcp-sessions-list.tsx index c089240..52cec98 100644 --- a/apps/webapp/app/components/mcp/virtual-mcp-sessions-list.tsx +++ b/apps/webapp/app/components/mcp/virtual-mcp-sessions-list.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from "react"; +import { useEffect, useRef } from "react"; import { InfiniteLoader, AutoSizer, @@ -10,11 +10,7 @@ import { import { type McpSessionItem } from "~/hooks/use-mcp-sessions"; import { ScrollManagedList } from "../virtualized-list"; import { Badge } from "../ui/badge"; -import { Input } from "../ui/input"; -import { Button } from "../ui/button"; -import { Check, Copy } from "lucide-react"; import { cn } from "~/lib/utils"; -import { Card, CardContent } from "../ui/card"; import { getIconForAuthorise } from "../icon-utils"; interface VirtualMcpSessionsListProps { @@ -25,81 +21,6 @@ interface VirtualMcpSessionsListProps { height?: number; } -export function MCPUrlBox() { - const [copied, setCopied] = useState(false); - const [selectedSource, setSelectedSource] = useState< - "Claude" | "Cursor" | "Other" - >("Claude"); - - const getMcpURL = (source: "Claude" | "Cursor" | "Other") => { - const baseUrl = "https://core.heysol.ai/api/v1/mcp"; - return `${baseUrl}?source=${source}`; - }; - - const mcpURL = getMcpURL(selectedSource); - - const copyToClipboard = async () => { - try { - await navigator.clipboard.writeText(mcpURL); - setCopied(true); - setTimeout(() => setCopied(false), 2000); - } catch (err) { - console.error("Failed to copy:", err); - } - }; - - return ( - - -
-
-
- {(["Claude", "Cursor", "Other"] as const).map((source) => ( - - ))} -
- -
- - -
-
-
-
-
- ); -} - function McpSessionItemRenderer( props: ListRowProps, sessions: McpSessionItem[], diff --git a/apps/webapp/app/routes/settings.mcp.tsx b/apps/webapp/app/routes/settings.mcp.tsx index 1e0944b..6663889 100644 --- a/apps/webapp/app/routes/settings.mcp.tsx +++ b/apps/webapp/app/routes/settings.mcp.tsx @@ -1,10 +1,7 @@ import { useState } from "react"; import { useMcpSessions } from "~/hooks/use-mcp-sessions"; import { McpSessionsFilters } from "~/components/mcp/mcp-sessions-filters"; -import { - MCPUrlBox, - VirtualMcpSessionsList, -} from "~/components/mcp/virtual-mcp-sessions-list"; +import { VirtualMcpSessionsList } from "~/components/mcp/virtual-mcp-sessions-list"; import { McpSourcesStats } from "~/components/mcp/mcp-sources-stats"; import { Card, CardContent } from "~/components/ui/card"; import { Database, LoaderCircle } from "lucide-react"; @@ -35,7 +32,6 @@ export default function McpSettings() {
{/* Top Sources Stats */}
- { @@ -136,7 +140,7 @@ async function createTransport( logger.error("Failed to send keep-alive ping, cleaning up interval." + e); clearInterval(keepAlive); } - }, 60000); // Send ping every 60 seconds + }, 30000); // Send ping every 60 seconds // Setup cleanup on close transport.onclose = async () => { @@ -147,24 +151,26 @@ async function createTransport( // Load integration transports try { - const result = await IntegrationLoader.loadIntegrationTransports( - sessionId, - userId, - workspaceId, - integrations.length > 0 ? integrations : undefined, - ); - logger.log( - `Loaded ${result.loaded} integration transports for session ${sessionId}`, - ); - if (result.failed.length > 0) { - logger.warn(`Failed to load some integrations: ${result.failed}`); + if (noIntegrations) { + const result = await IntegrationLoader.loadIntegrationTransports( + sessionId, + userId, + workspaceId, + integrations.length > 0 ? integrations : undefined, + ); + logger.log( + `Loaded ${result.loaded} integration transports for session ${sessionId}`, + ); + if (result.failed.length > 0) { + logger.warn(`Failed to load some integrations: ${result.failed}`); + } } } catch (error) { logger.error(`Error loading integration transports: ${error}`); } // Create and connect MCP server - const server = await createMcpServer(userId, sessionId); + const server = await createMcpServer(userId, sessionId, source); await server.connect(transport); return transport; @@ -183,6 +189,8 @@ export const handleMCPRequest = async ( ? queryParams.integrations.split(",").map((s) => s.trim()) : []; + const noIntegrations = queryParams.no_integrations ?? false; + const userId = authentication.userId; const workspace = await getWorkspaceByUser(userId); const workspaceId = workspace?.id as string; @@ -206,6 +214,7 @@ export const handleMCPRequest = async ( sessionId, sessionDetails.source, sessionDetails.integrations, + noIntegrations, userId, workspaceId, ); @@ -222,6 +231,7 @@ export const handleMCPRequest = async ( currentSessionId, source, integrations, + noIntegrations, userId, workspaceId, ); diff --git a/apps/webapp/app/utils/mcp/memory.ts b/apps/webapp/app/utils/mcp/memory.ts index 249ef38..304cecd 100644 --- a/apps/webapp/app/utils/mcp/memory.ts +++ b/apps/webapp/app/utils/mcp/memory.ts @@ -66,13 +66,14 @@ export async function callMemoryTool( toolName: string, args: any, userId: string, + source: string, ) { try { switch (toolName) { case "memory_ingest": - return await handleMemoryIngest({ ...args, userId }); + return await handleMemoryIngest({ ...args, userId, source }); case "memory_search": - return await handleMemorySearch({ ...args, userId }); + return await handleMemorySearch({ ...args, userId, source }); case "memory_get_spaces": return await handleMemoryGetSpaces(userId); default: diff --git a/apps/webapp/app/utils/mcp/session-manager.ts b/apps/webapp/app/utils/mcp/session-manager.ts index a7dfa1a..313c321 100644 --- a/apps/webapp/app/utils/mcp/session-manager.ts +++ b/apps/webapp/app/utils/mcp/session-manager.ts @@ -82,6 +82,7 @@ export class MCPSessionManager { id: session.id, source: session.source, integrations: session.integrations, + noIntegrations: session.noIntegrations, createdAt: session.createdAt, deleted: session.deleted || undefined, workspaceId: session.workspaceId || undefined,