Skip to main content
Glama
service-container.interface.ts11.4 kB
import { KuzuDBClient } from '../../db/kuzu'; import { RepositoryProvider } from '../../db/repository-provider'; import { ToolHandlerContext } from '../../mcp/types/sdk-custom'; import { SnapshotService } from '../snapshot.service'; /** * Service container interface for dependency injection * Eliminates circular dependencies by providing service access through interfaces */ export interface IServiceContainer { // Core infrastructure services getRepositoryProvider(): RepositoryProvider; getKuzuClient(mcpContext: ToolHandlerContext, clientProjectRoot: string): Promise<KuzuDBClient>; getSnapshotService( mcpContext: ToolHandlerContext, clientProjectRoot: string, ): Promise<SnapshotService>; // Domain service access methods (lazy-loaded) getMemoryBankService(): Promise<IMemoryBankService>; getMetadataService(): Promise<IMetadataService>; getEntityService(): Promise<IEntityService>; getContextService(): Promise<IContextService>; getGraphQueryService(): Promise<IGraphQueryService>; getGraphAnalysisService(): Promise<IGraphAnalysisService>; // Specialized entity service access methods (optional - for clients that need specific functionality) getComponentService?(): Promise<IComponentService>; getDecisionService?(): Promise<IDecisionService>; getRuleService?(): Promise<IRuleService>; getFileService?(): Promise<IFileService>; getTagService?(): Promise<ITagService>; getAssociationService?(): Promise<IAssociationService>; getBulkOperationsService?(): Promise<IBulkOperationsService>; // Lifecycle management shutdown(): Promise<void>; } /** * Service interfaces to break circular dependencies */ export interface IMemoryBankService { initMemoryBank( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch?: string, ): Promise<{ success: boolean; message?: string }>; getOrCreateRepository( mcpContext: ToolHandlerContext, clientProjectRoot: string, name: string, branch?: string, ): Promise<any>; } export interface IMetadataService { updateMetadata( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, metadataContent: any, branch?: string, ): Promise<{ success: boolean; message?: string } | null>; getMetadata( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch?: string, ): Promise<any>; } // Component service interface - handles component-specific operations export interface IComponentService { upsertComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentData: any, ): Promise<any>; getComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, ): Promise<any>; updateComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, updates: any, ): Promise<any>; deleteComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, ): Promise<boolean>; } // Decision service interface - handles decision-specific operations export interface IDecisionService { upsertDecision( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, decisionData: any, ): Promise<any>; getDecision( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, decisionId: string, ): Promise<any>; updateDecision( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, decisionId: string, updates: any, ): Promise<any>; deleteDecision( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, decisionId: string, ): Promise<boolean>; } // Rule service interface - handles rule-specific operations export interface IRuleService { upsertRule( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, rule: any, branch?: string, ): Promise<any>; getRule( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, ruleId: string, ): Promise<any>; updateRule( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, ruleId: string, updates: any, ): Promise<any>; deleteRule( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, ruleId: string, ): Promise<boolean>; } // File service interface - handles file-specific operations export interface IFileService { addFile( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, fileData: any, ): Promise<any>; getFile( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, fileId: string, ): Promise<any>; deleteFile( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, fileId: string, ): Promise<boolean>; } // Tag service interface - handles tag-specific operations export interface ITagService { addTag( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, tagData: any, ): Promise<any>; getTag( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, tagId: string, ): Promise<any>; deleteTag( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, tagId: string, ): Promise<boolean>; } // Association service interface - handles relationships between entities export interface IAssociationService { associateFileWithComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, fileId: string, ): Promise<any>; tagItem( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, itemId: string, itemType: string, tagId: string, ): Promise<any>; } // Bulk operations service interface - handles batch operations export interface IBulkOperationsService { bulkDeleteByType( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, entityType: string, options?: any, ): Promise<any>; bulkDeleteByTag( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, tagId: string, options?: any, ): Promise<any>; bulkDeleteByBranch( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, targetBranch: string, options?: any, ): Promise<any>; bulkDeleteByRepository( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, options?: any, ): Promise<any>; } // Unified entity service interface - composes all entity services export interface IEntityService extends IComponentService, IDecisionService, IRuleService, IFileService, ITagService, IAssociationService, IBulkOperationsService { // Additional operations that don't fit into specific entity categories deleteContext( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, contextId: string, ): Promise<boolean>; } export interface IContextService { updateContext( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; getLatestContexts( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch?: string, limit?: number, ): Promise<any>; } export interface IGraphQueryService { // Active components query getActiveComponents( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch?: string, ): Promise<any>; countNodesByLabel( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, nodeLabel: string, ): Promise<any>; listNodesByLabel( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, nodeLabel: string, limit?: number, offset?: number, ): Promise<any>; getRelatedItems( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, itemId: string, opParams: any, ): Promise<any>; getComponentDependencies( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, ): Promise<any>; getComponentDependents( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, ): Promise<any>; getGoverningItemsForComponent( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, componentId: string, ): Promise<any>; getItemContextualHistory( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, itemId: string, itemType: string, ): Promise<any>; findItemsByTag( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, tagId: string, entityType?: string, ): Promise<any>; listAllNodeLabels( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, ): Promise<any>; getNodeProperties( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, nodeLabel: string, ): Promise<any>; listAllIndexes( mcpContext: ToolHandlerContext, clientProjectRoot: string, repositoryName: string, branch: string, target?: string, ): Promise<any>; } export interface IGraphAnalysisService { pageRank(mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any): Promise<any>; kCoreDecomposition( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; louvainCommunityDetection( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; shortestPath( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; getStronglyConnectedComponents( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; getWeaklyConnectedComponents( mcpContext: ToolHandlerContext, clientProjectRoot: string, params: any, ): Promise<any>; }

Latest Blog Posts

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/Jakedismo/KuzuMem-MCP'

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