Skip to main content

Query Feature Architecture

This document provides a detailed architecture overview of the Query feature in the DevOps AI Toolkit.

Overview

The Query feature provides a natural language interface for Kubernetes cluster intelligence. Users can ask questions about cluster resources, capabilities, and status in plain English, with the AI autonomously deciding which tools to call to gather the necessary information.

High-Level Architecture

Query Workflow

The query tool operates as an agentic loop where the AI autonomously decides which tools to call:

Component Details

MCP Server (dot-ai)

The MCP server hosts the query tool and orchestrates AI-driven investigation:

ComponentFileDescription
query toolsrc/tools/query.tsEntry point, orchestrates tool loop and session
System Promptprompts/query-system.mdAI instructions for query behavior
GenericSessionManagersrc/core/generic-session-manager.tsFile-based session persistence
AIProvidersrc/core/ai-provider.interface.tsAI abstraction with tool loop support
AIProviderFactorysrc/core/ai-provider-factory.tsMulti-provider factory
capability-toolssrc/core/capability-tools.tsSemantic search for capabilities
resource-toolssrc/core/resource-tools.tsSemantic search for resources
kubectl-toolssrc/core/kubectl-tools.tsKubectl read-only tools
CapabilityVectorServicesrc/core/capability-vector-service.tsCapability embeddings storage
ResourceVectorServicesrc/core/resource-vector-service.tsResource embeddings storage
EmbeddingServicesrc/core/embedding-service.tsMulti-provider embedding generation
visualizationsrc/core/visualization.tsURL generation for web UI

Query Tools Available to AI

The AI can autonomously call these tools during investigation:

ToolTypeDescription
search_capabilitiesSemanticVector similarity search for resource capabilities
query_capabilitiesFilterStructured filter queries for capabilities
search_resourcesSemanticVector similarity search for cluster resources
query_resourcesFilterStructured filter queries for resources
kubectl_api_resourcesKubectlList all available API resources
kubectl_getKubectlGet resources with current state
kubectl_describeKubectlDetailed resource information
kubectl_logsKubectlContainer logs from pods
kubectl_eventsKubectlKubernetes events for troubleshooting
kubectl_get_crd_schemaKubectlOpenAPI v3 schema for CRDs

Controller (dot-ai-controller)

The Kubernetes controller syncs cluster data to Qdrant for semantic search:

ComponentFileDescription
ResourceSyncReconcilerinternal/controller/resourcesync_controller.goWatches all resources, syncs to MCP
CapabilityScanReconcilerinternal/controller/capabilityscan_controller.goTriggers capability scans on CRD changes
ResourceSyncConfig CRDapi/v1alpha1/resourcesyncconfig_types.goConfiguration for resource sync
CapabilityScanConfig CRDapi/v1alpha1/capabilityscanconfig_types.goConfiguration for capability scanning
MCP Resource Clientinternal/controller/resourcesync_mcp.goHTTP client for /api/v1/resources/sync
MCP Capability Clientinternal/controller/capabilityscan_mcp.goHTTP client for /api/v1/tools/manageOrgData
Debounce Bufferinternal/controller/resourcesync_debounce.goBatches changes before sync

Web UI (dot-ai-ui)

Provides visualization for query results:

ComponentFileDescription
Visualization Pagesrc/pages/Visualization.tsxMain page for /v/{sessionId}
MermaidRenderersrc/components/renderers/MermaidRenderer.tsxInteractive diagrams with zoom/pan
CardRenderersrc/components/renderers/CardRenderer.tsxResource cards in grid layout
TableRenderersrc/components/renderers/TableRenderer.tsxTabular data display
CodeRenderersrc/components/renderers/CodeRenderer.tsxSyntax-highlighted code/YAML
InsightsPanelsrc/components/InsightsPanel.tsxAI observations display
TabContainersrc/components/TabContainer.tsxMulti-visualization tabs
API Clientsrc/api/client.tsData fetching from MCP server

Integration Points

MCP Server ↔ AI Provider

  • Tool Loop: AI iteratively calls tools (max 20 iterations by default)
  • Autonomous Decision: AI decides which tools to call based on user intent
  • JSON Output: AI returns structured JSON with summary

MCP Server ↔ Qdrant

  • Semantic Search: Vector similarity using embeddings
  • Filter Queries: Structured queries by namespace, kind, labels, etc.
  • Capability Data: Resource kinds with capabilities, providers, abstractions
  • Resource Data: Cluster resources with labels, annotations, timestamps

Controller ↔ MCP Server

  • Resource Sync: Controller watches all resources and syncs to MCP
  • Capability Scanning: Controller triggers scans when CRDs change
  • Debounced Batching: Changes batched every 10s to reduce API calls
  • Periodic Resync: Full resync every 60 minutes for consistency

MCP Server ↔ Web UI

  • Session Storage: Query results stored with session IDs
  • Visualization API: /api/v1/visualize/{sessionId} endpoint
  • URL Generation: WEB_UI_BASE_URL/v/{sessionId}
  • Cached Visualizations: AI-generated visualizations cached in session

Session Management

Sessions persist query data for visualization:

Session ID Format: qry-{timestamp}-{uuid8}
Example: qry-1767465086590-a1b2c3d4

Session Data:
├── toolName: 'query'
├── intent: "What databases are running in the cluster?"
├── summary: "Found 3 PostgreSQL clusters and 2 Redis instances..."
├── toolsUsed: ['search_capabilities', 'kubectl_get', ...]
├── iterations: 5
├── toolCallsExecuted:
│ ├── {tool: 'search_capabilities', input: {...}, output: {...}}
│ ├── {tool: 'kubectl_get', input: {...}, output: {...}}
│ └── ...
├── cachedVisualization:
│ ├── title: "Database Resources"
│ ├── visualizations: [...]
│ ├── insights: [...]
│ └── generatedAt: ISO timestamp
└── timestamp: ISO date

Data Flow: Resource Sync

Output Formats

The query tool returns structured output:

FieldDescription
successBoolean indicating query success
summaryHuman-readable summary of findings
toolsUsedList of tools called during investigation
iterationsNumber of AI tool loop iterations
sessionIdSession ID for visualization
visualizationUrlURL to view results (if configured)
guidanceInstructions for agent on presenting results
errorError object with code and message (if failed)

Error Handling

The query workflow includes robust error handling:

  1. Input Validation: Intent must be non-empty string (1-1000 chars)
  2. AI Provider Errors: Logged with request IDs for debugging
  3. Vector DB Unavailable: Falls back to keyword search or kubectl-only
  4. JSON Parsing Failures: Original AI response logged for analysis
  5. Tool Execution Errors: Captured in toolCallsExecuted, investigation continues
  6. Max Iterations: Default 20 iterations prevents infinite loops

Configuration

Environment Variables

VariableDescriptionDefault
AI_PROVIDERAI provider selectionanthropic
ANTHROPIC_API_KEYAnthropic API keyRequired if using
OPENAI_API_KEYOpenAI API keyRequired if using
QDRANT_URLQdrant vector DB endpointhttp://localhost:6333
QDRANT_API_KEYQdrant authenticationOptional
QDRANT_CAPABILITIES_COLLECTIONCapabilities collection namecapabilities
QDRANT_RESOURCES_COLLECTIONResources collection nameresources
CUSTOM_EMBEDDINGS_API_KEYEmbedding service API keyFalls back to provider key
KUBECONFIGKubernetes config pathAuto-detected
WEB_UI_BASE_URLWeb UI base URLOptional
DEBUG_DOT_AIEnable debug loggingfalse

Supported AI Providers

ProviderModelsNotes
AnthropicClaude Sonnet 4.5, Opus, HaikuDefault, 1M token context
OpenAIGPT-5.1-codex
GoogleGemini 3 Pro, Flash
xAIGrok-4
Amazon BedrockVariousUses AWS credential chain
OpenRouterMulti-modelProxy to multiple providers
CustomOllama, vLLM, LocalAIVia baseURL config

Supported Embedding Providers

ProviderModelDimensions
OpenAItext-embedding-3-small1536
Googlegemini-embedding-001768
Amazon Bedrocktitan-embed-text-v2:01024

See Also