Skip to main content
Glama

MetaMCP MCP Server

by metatool-ai
sessions.ts1.77 kB
import { getMcpServers, ServerParameters } from "./fetch-metamcp.js"; import { ConnectedClient, createMetaMcpClient, connectMetaMcpClient, } from "./client.js"; import { getSessionKey } from "./utils.js"; const _sessions: Record<string, ConnectedClient> = {}; export const getSession = async ( sessionKey: string, uuid: string, params: ServerParameters ): Promise<ConnectedClient | undefined> => { if (sessionKey in _sessions) { return _sessions[sessionKey]; } else { // Close existing session for this UUID if it exists with a different hash const old_session_keys = Object.keys(_sessions).filter((k) => k.startsWith(`${uuid}_`) ); await Promise.allSettled( old_session_keys.map(async (old_session_key) => { await _sessions[old_session_key].cleanup(); delete _sessions[old_session_key]; }) ); const { client, transport } = createMetaMcpClient(params); if (!client || !transport) { return; } const newClient = await connectMetaMcpClient(client, transport); if (!newClient) { return; } _sessions[sessionKey] = newClient; return newClient; } }; export const initSessions = async (): Promise<void> => { const serverParams = await getMcpServers(true); await Promise.allSettled( Object.entries(serverParams).map(async ([uuid, params]) => { const sessionKey = getSessionKey(uuid, params); try { await getSession(sessionKey, uuid, params); } catch (error) {} }) ); }; export const cleanupAllSessions = async (): Promise<void> => { await Promise.allSettled( Object.entries(_sessions).map(async ([sessionKey, session]) => { await session.cleanup(); delete _sessions[sessionKey]; }) ); };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/metatool-ai/mcp-server-metamcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server