Skip to main content
Glama
capability-vector-service.ts5.31 kB
/** * Capability Vector Service * * Vector-based storage and retrieval for resource capabilities * Extends BaseVectorService to provide capability-specific operations */ import { BaseVectorService, BaseSearchOptions, BaseSearchResult } from './base-vector-service'; import { VectorDBService } from './vector-db-service'; import { EmbeddingService } from './embedding-service'; import { CapabilityInferenceEngine, ResourceCapability } from './capabilities'; // Re-export for backward compatibility export type { ResourceCapability }; export interface CapabilitySearchOptions extends BaseSearchOptions { complexityFilter?: 'low' | 'medium' | 'high'; providerFilter?: string[]; } /** * Vector service for storing and searching resource capabilities */ export class CapabilityVectorService extends BaseVectorService<ResourceCapability> { constructor(collectionName: string = 'capabilities', vectorDB?: VectorDBService, embeddingService?: EmbeddingService) { super(collectionName, vectorDB, embeddingService); } /** * Create searchable text from capability data for embedding generation */ protected createSearchText(capability: ResourceCapability): string { return [ capability.resourceName, ...capability.capabilities, ...capability.providers, ...capability.abstractions, capability.description, capability.useCase, capability.complexity ].join(' '); } /** * Extract unique ID from capability data */ protected extractId(capability: ResourceCapability): string { return CapabilityInferenceEngine.generateCapabilityId(capability.resourceName); } /** * Convert capability to storage payload format */ protected createPayload(capability: ResourceCapability): Record<string, any> { return { resourceName: capability.resourceName, apiVersion: capability.apiVersion, version: capability.version, group: capability.group, capabilities: capability.capabilities, providers: capability.providers, abstractions: capability.abstractions, complexity: capability.complexity, description: capability.description, useCase: capability.useCase, confidence: capability.confidence, analyzedAt: capability.analyzedAt }; } /** * Convert storage payload back to capability object */ protected payloadToData(payload: Record<string, any>): ResourceCapability { return { resourceName: payload.resourceName, apiVersion: payload.apiVersion, version: payload.version, group: payload.group, capabilities: payload.capabilities || [], providers: payload.providers || [], abstractions: payload.abstractions || [], complexity: payload.complexity || 'medium', description: payload.description || '', useCase: payload.useCase || '', confidence: payload.confidence || 0, analyzedAt: payload.analyzedAt || new Date().toISOString() }; } /** * Store a capability in the vector database */ async storeCapability(capability: ResourceCapability): Promise<void> { await this.storeData(capability); } /** * Search capabilities by user intent with optional filters */ async searchCapabilities( intent: string, options: CapabilitySearchOptions = {} ): Promise<BaseSearchResult<ResourceCapability>[]> { const results = await this.searchData(intent, options); // Apply complexity filter if specified if (options.complexityFilter) { return results.filter((result: BaseSearchResult<ResourceCapability>) => result.data.complexity === options.complexityFilter); } // Apply provider filter if specified if (options.providerFilter && options.providerFilter.length > 0) { return results.filter((result: BaseSearchResult<ResourceCapability>) => result.data.providers.some((provider: string) => options.providerFilter!.includes(provider) ) ); } return results; } /** * Get capability by ID * Used by MCP operations with IDs from list/search results */ async getCapability(id: string): Promise<ResourceCapability | null> { return await this.getData(id); } /** * Delete capability by resource name */ async deleteCapability(resourceName: string): Promise<void> { const capabilityId = CapabilityInferenceEngine.generateCapabilityId(resourceName); await this.deleteData(capabilityId); } /** * Delete capability by ID (for MCP tool interface) */ async deleteCapabilityById(id: string): Promise<void> { await this.deleteData(id); } /** * Delete all capabilities efficiently by recreating collection */ async deleteAllCapabilities(): Promise<void> { await this.deleteAllData(); } /** * List all capabilities with optional pagination */ async getAllCapabilities(limit?: number): Promise<ResourceCapability[]> { return await this.getAllData(limit); } /** * Get count of stored capabilities */ async getCapabilitiesCount(): Promise<number> { // Use getAllData to get count since base class doesn't expose getCount const allCapabilities = await this.getAllData(); // Get all capabilities to count them return allCapabilities.length; } }

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/vfarcic/dot-ai'

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