Architecture
System Overview
DataMeshOps is organized into four modular operational layers:
┌─────────────────────────────────────────────┐
│ Agent Integration Layer │
│ DataMeshOps-Healer DataMeshOps-Guard │
├─────────────────────────────────────────────┤
│ Core Abstraction Layer │
│ MCPClientManager GraphTraverser │
│ MutationEngine LLMAdapter │
│ DataHubBatchMutatorSkill │
├─────────────────────────────────────────────┤
│ DataHub Communication Layer │
│ mcp-server-datahub (stdio/HTTP) │
│ DataHub GMS REST/GraphQL endpoints │
├─────────────────────────────────────────────┤
│ LLM Orchestration Layer │
│ OpenAI GPT-4o / Gemini 2.5 Flash │
│ Anthropic Claude (adapter pattern) │
└─────────────────────────────────────────────┘
Core Modules
| Module | Purpose |
|---|---|
datameshops_core/mcp_client.py |
Async MCP transport, exponential backoff, GMS GraphQL/REST |
datameshops_core/graph_traverser.py |
Multi-hop lineage traversal, schema inspection, query history |
datameshops_core/mutation_engine.py |
Atomic tag, property, description, and incident mutations |
datameshops_core/llm_adapter.py |
Provider-agnostic LLM router (OpenAI, Gemini, Anthropic) |
datameshops_core/batch_mutator.py |
DataHubBatchMutatorSkill — PR contribution to datahub-skills |
LLM Provider Selection
Set via environment variable — no code changes needed:
# OpenAI (default)
export LLM_PROVIDER=openai
export OPENAI_API_KEY=sk-...
# Google Gemini
export LLM_PROVIDER=gemini
export GEMINI_API_KEY=...
# No key — deterministic mock fallback, zero cost
# (used for offline demo and judge testing)
Zero-Cost Judge Testing
Both agents include deterministic mock fallback paths. Without any API key or DataHub instance:
MCPClientManagerreturns realistic structured mock responsesLLMAdapterreturns pre-computed SQL and audit reportsMutationEnginesimulates all graph mutations and logs them- Full output is identical to live execution — minus network calls