Skip to main content
Glama

HomeAssistant MCP

processor.ts3.83 kB
import { AIIntent, AIContext, AIConfidence, AIError } from "../types/index.js"; import { EntityExtractor } from "./entity-extractor.js"; import { IntentClassifier } from "./intent-classifier.js"; import { ContextAnalyzer } from "./context-analyzer.js"; export class NLPProcessor { private entityExtractor: EntityExtractor; private intentClassifier: IntentClassifier; private contextAnalyzer: ContextAnalyzer; constructor() { this.entityExtractor = new EntityExtractor(); this.intentClassifier = new IntentClassifier(); this.contextAnalyzer = new ContextAnalyzer(); } async processCommand( input: string, context: AIContext, ): Promise<{ intent: AIIntent; confidence: AIConfidence; error?: AIError; }> { try { // Extract entities from the input const entities = await this.entityExtractor.extract(input); // Classify the intent const intent = await this.intentClassifier.classify(input, entities); // Analyze context relevance const contextRelevance = await this.contextAnalyzer.analyze( intent, context, ); // Calculate confidence scores const confidence: AIConfidence = { overall: (intent.confidence + entities.confidence + contextRelevance.confidence) / 3, intent: intent.confidence, entities: entities.confidence, context: contextRelevance.confidence, }; // Create structured intent const structuredIntent: AIIntent = { action: intent.action, target: entities.primary_target, parameters: { ...entities.parameters, ...intent.parameters, context_parameters: contextRelevance.relevant_params, }, raw_input: input, }; return { intent: structuredIntent, confidence, }; } catch (error: unknown) { const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; return { intent: { action: "error", target: "system", parameters: {}, raw_input: input, }, confidence: { overall: 0, intent: 0, entities: 0, context: 0, }, error: { code: "NLP_PROCESSING_ERROR", message: errorMessage, suggestion: "Please try rephrasing your command", recovery_options: [ "Use simpler language", "Break down the command into smaller parts", "Specify the target device explicitly", ], context, }, }; } } async validateIntent( intent: AIIntent, confidence: AIConfidence, threshold = 0.7, ): Promise<boolean> { return ( confidence.overall >= threshold && confidence.intent >= threshold && confidence.entities >= threshold && confidence.context >= threshold ); } async suggestCorrections(input: string, error: AIError): Promise<string[]> { // Implement correction suggestions based on the error const suggestions: string[] = []; if (error.code === "ENTITY_NOT_FOUND") { suggestions.push( "Try specifying the device name more clearly", "Use the exact device name from your Home Assistant setup", ); } if (error.code === "AMBIGUOUS_INTENT") { suggestions.push( "Please specify what you want to do with the device", 'Use action words like "turn on", "set", "adjust"', ); } if (error.code === "CONTEXT_MISMATCH") { suggestions.push( "Specify the location if referring to a device", "Clarify which device you mean in the current context", ); } return suggestions; } }

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/jango-blockchained/advanced-homeassistant-mcp'

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