Skip to main content
Glama

MemoryMesh

by CheMiguel23
MetadataManager.ts3.56 kB
// src/core/managers/implementations/MetadataManager.ts import {IMetadataManager} from './interfaces/IMetadataManager.js'; import {IManager} from './interfaces/IManager.js'; import {GraphValidator} from '@core/index.js'; import type {Metadata, MetadataAddition, MetadataResult, MetadataDeletion} from '@core/index.js'; /** * Implements metadata-related operations for the knowledge graph. * Includes adding, deleting, and retrieving metadata associated with nodes. */ export class MetadataManager extends IManager implements IMetadataManager { /** * Adds metadata to existing nodes. */ async addMetadata(metadata: MetadataAddition[]): Promise<MetadataResult[]> { try { this.emit('beforeAddMetadata', {metadata}); const graph = await this.storage.loadGraph(); const results: MetadataResult[] = []; for (const item of metadata) { GraphValidator.validateNodeExists(graph, item.nodeName); const node = graph.nodes.find(e => e.name === item.nodeName); if (!Array.isArray(node!.metadata)) { node!.metadata = []; } const newMetadata = item.contents.filter(content => !node!.metadata.includes(content) ); node!.metadata.push(...newMetadata); results.push({ nodeName: item.nodeName, addedMetadata: newMetadata }); } await this.storage.saveGraph(graph); this.emit('afterAddMetadata', {results}); return results; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; throw new Error(errorMessage); } } /** * Deletes metadata from nodes. */ async deleteMetadata(deletions: MetadataDeletion[]): Promise<void> { try { this.emit('beforeDeleteMetadata', {deletions}); const graph = await this.storage.loadGraph(); let deletedCount = 0; for (const deletion of deletions) { GraphValidator.validateNodeExists(graph, deletion.nodeName); const node = graph.nodes.find(e => e.name === deletion.nodeName); if (node) { const initialMetadataCount = node.metadata.length; node.metadata = node.metadata.filter(o => !deletion.metadata.includes(o) ); deletedCount += initialMetadataCount - node.metadata.length; } } await this.storage.saveGraph(graph); this.emit('afterDeleteMetadata', {deletedCount}); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; throw new Error(errorMessage); } } /** * Retrieves metadata for a specific node. */ async getMetadata(nodeName: string): Promise<Metadata> { try { const graph = await this.storage.loadGraph(); GraphValidator.validateNodeExists(graph, nodeName); const node = graph.nodes.find(e => e.name === nodeName); return node!.metadata || []; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; throw new Error(errorMessage); } } }

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/CheMiguel23/MemoryMesh'

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