Spaces:
Sleeping
Sleeping
File size: 1,586 Bytes
05c5ed5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import { MCPServerInfo } from "app-types/mcp";
import { mcpClientsManager } from "lib/ai/mcp/mcp-manager";
import { mcpRepository } from "lib/db/repository";
import { getCurrentUser } from "lib/auth/permissions";
export async function GET() {
const currentUser = await getCurrentUser();
if (!currentUser || !currentUser.id) {
return Response.json({ error: "Unauthorized" }, { status: 401 });
}
const [servers, memoryClients] = await Promise.all([
mcpRepository.selectAllForUser(currentUser.id),
mcpClientsManager.getClients(),
]);
const memoryMap = new Map(
memoryClients.map(({ id, client }) => [id, client] as const),
);
// Add servers that exist in DB but not yet in memory
const addTargets = servers.filter((server) => !memoryMap.has(server.id));
if (addTargets.length > 0) {
// no need to wait for this
Promise.allSettled(
addTargets.map((server) => mcpClientsManager.refreshClient(server.id)),
);
}
const result = servers.map((server) => {
const mem = memoryMap.get(server.id);
const info = mem?.getInfo();
const isOwner = server.userId === currentUser.id;
const mcpInfo: MCPServerInfo = {
...server,
// Hide config from non-owners to prevent credential exposure
config: isOwner ? server.config : undefined,
enabled: info?.enabled ?? true,
status: info?.status ?? "disconnected",
lastConnectionStatus: server.lastConnectionStatus,
error: info?.error,
toolInfo: info?.toolInfo ?? [],
};
return mcpInfo;
});
return Response.json(result);
}
|