MCP Hub
Back to servers

logclaw-mcp-server

Connect AI coding tools to LogClaw incidents, logs, and anomaly detections.

Registry
Updated
Mar 11, 2026

Quick Install

npx -y logclaw-mcp-server

LogClaw — Helm Chart Monorepo

Enterprise-grade Kubernetes deployment stack for LogClaw — an AI-powered log intelligence platform with real-time anomaly detection, trace-correlated incident ticketing, and GitOps-native multi-tenancy.


TL;DR — Run Locally in One Command

Option A: Docker Compose (no clone, no build — fastest)

curl -O https://raw.githubusercontent.com/logclaw/logclaw/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/logclaw/logclaw/main/otel-collector-config.yaml
docker compose up -d

Open http://localhost:3000 — the full LogClaw stack is running:

  • Dashboard (:3000) — incidents, log ingestion, config
  • OTel Collector (:4317 gRPC, :4318 HTTP) — send logs via OTLP
  • Bridge (:8080) — anomaly detection + trace correlation
  • Ticketing Agent (:18081) — AI-powered incident management
  • OpenSearch (:9200) — log storage + search
  • Kafka (:9092) — event bus

All images are pulled from ghcr.io/logclaw/ — no registry auth required.

Option B: Kind Cluster (full Kubernetes stack)

git clone https://github.com/logclaw/logclaw.git && cd logclaw
./scripts/setup-dev.sh

This creates a Kind cluster, installs all operators and services, builds the dashboard, and runs a smoke test. Takes ~20 minutes on a 16 GB laptop.

Container Images

All LogClaw images are published to GHCR as public packages:

ServiceImageLatest Stable
Dashboardghcr.io/logclaw/logclaw-dashboardstable / 2.5.0
Bridgeghcr.io/logclaw/logclaw-bridgestable / 1.3.0
Ticketing Agentghcr.io/logclaw/logclaw-ticketing-agentstable / 1.5.0
Flink Jobsghcr.io/logclaw/logclaw-flink-jobsstable / 0.1.1

Pull any image directly:

docker pull ghcr.io/logclaw/logclaw-dashboard:stable

Architecture

LogClaw Stack (per tenant, namespace-isolated)
│
├── logclaw-otel-collector   OpenTelemetry Collector (OTLP gRPC + HTTP)
├── logclaw-kafka           Strimzi Kafka 3-broker KRaft cluster
├── logclaw-flink           ETL + enrichment + anomaly scoring
├── logclaw-opensearch      OpenSearch cluster (hot-tier log storage)
├── logclaw-bridge          OTLP ETL + trace correlation + lifecycle manager
├── logclaw-ml-engine       Feast Feature Store + KServe/TorchServe + Ollama
├── logclaw-airflow         Apache Airflow (ML training DAGs)
├── logclaw-ticketing-agent AI-powered RCA + multi-platform ticketing
├── logclaw-dashboard       Next.js web UI (ingestion, incidents, config, dark mode)
├── logclaw-zammad          In-cluster ITSM (zero-egress alternative)
└── logclaw-platform        ESO SecretStore, cert-manager, RBAC baseline

Data flow: Logs → OTel Collector (OTLP ingestion) → Kafka → Bridge (OTLP ETL + anomaly + trace correlation) → OpenSearch + Ticketing Agent → Incident tickets

All charts are wired together by the logclaw-tenant umbrella chart — a single helm install deploys the full stack for one tenant.


Quick Start (Production / ArgoCD)

Prerequisites

One-time cluster setup (operators, run once per cluster):

helmfile -f helmfile.d/00-operators.yaml apply

Onboard a new tenant

  1. Copy the template:

    cp gitops/tenants/_template.yaml gitops/tenants/tenant-<id>.yaml
    
  2. Fill in the required values (tenantId, tier, cloudProvider, secret store config).

  3. Commit and push — ArgoCD will detect the new file and deploy the full stack in ~30 minutes.

Manual install (dev/staging)

helm install logclaw-acme charts/logclaw-tenant \
  --namespace logclaw-acme \
  --create-namespace \
  -f gitops/tenants/tenant-acme.yaml

Running Locally (Step by Step)

Prefer the one-command setup? Run ./scripts/setup-dev.sh and skip to Step 6.

Prerequisites

# macOS (Homebrew)
brew install helm helmfile kind kubectl node python3

# Helm plugins
helm plugin install https://github.com/databus23/helm-diff
helm plugin install https://github.com/helm-unittest/helm-unittest

# Docker Desktop must be running
open -a Docker

1 — Create a local Kubernetes cluster

make kind-create

Verify:

kubectl cluster-info --context kind-logclaw-dev

2 — Install cluster-level operators

make install-operators

Wait for operators to be ready (~3 min):

kubectl get pods -n strimzi-system -w
kubectl get pods -n opensearch-operator-system -w

3 — Install the full tenant stack

make install TENANT_ID=dev-local STORAGE_CLASS=standard

This deploys all 12 helmfile releases in dependency order. Monitor progress:

watch kubectl get pods -n logclaw-dev-local
TimeMilestone
T+2 minNamespace, RBAC, NetworkPolicies
T+6 minKafka broker ready
T+10 minOpenSearch cluster green
T+15 minBridge + Ticketing Agent running
T+20 minFull stack operational

4 — Build and deploy the Dashboard

The dashboard requires a Docker image build:

docker build -t logclaw-dashboard:dev apps/dashboard/
kind load docker-image logclaw-dashboard:dev --name logclaw-dev

helm upgrade --install logclaw-dashboard-dev-local charts/logclaw-dashboard \
  --namespace logclaw-dev-local \
  --set global.tenantId=dev-local \
  -f charts/logclaw-dashboard/ci/default-values.yaml

5 — Access the services

# Dashboard (main UI)
kubectl port-forward svc/logclaw-dashboard-dev-local 3333:3000 -n logclaw-dev-local
open http://localhost:3333

# OpenSearch (query API)
kubectl port-forward svc/logclaw-opensearch-dev-local 9200:9200 -n logclaw-dev-local

# Airflow (ML pipelines)
kubectl port-forward svc/logclaw-airflow-dev-local-webserver 8080:8080 -n logclaw-dev-local
open http://localhost:8080   # admin / admin

6 — Send logs

LogClaw ingests logs via OTLP (OpenTelemetry Protocol) — the CNCF industry standard. Port-forward the OTel Collector:

kubectl port-forward svc/logclaw-otel-collector-dev-local 4318:4318 -n logclaw-dev-local &

Send a single log via OTLP HTTP:

curl -X POST http://localhost:4318/v1/logs \
  -H "Content-Type: application/json" \
  -d '{
    "resourceLogs": [{
      "resource": {
        "attributes": [
          {"key": "service.name", "value": {"stringValue": "payment-api"}}
        ]
      },
      "scopeLogs": [{
        "logRecords": [{
          "timeUnixNano": "'$(date +%s)000000000'",
          "severityText": "ERROR",
          "body": {"stringValue": "Connection refused to database"},
          "traceId": "abcdef1234567890abcdef1234567890",
          "spanId": "abcdef12345678"
        }]
      }]
    }]
  }'

Any OpenTelemetry SDK or agent can send logs to LogClaw — no custom integration needed. See OTLP Integration Guide for SDK examples.

Generate and ingest 900 sample Apple Pay logs:

# Generate sample OTel logs
python3 scripts/generate-applepay-logs.py    # → 500 payment flow logs
python3 scripts/generate-applepay-logs-2.py  # → 400 infra/security errors

# Ingest them
./scripts/ingest-logs.sh scripts/applepay-otel-500.json
./scripts/ingest-logs.sh scripts/applepay-otel-400-batch2.json

Or use the helper script:

./scripts/ingest-logs.sh --generate   # generates + ingests all sample logs
./scripts/ingest-logs.sh --smoke      # single test log

7 — See it in action

After ingesting error logs, the Bridge detects anomalies and the Ticketing Agent creates incident tickets. View them:

# Watch Bridge trace correlation in real-time
kubectl logs -f deployment/logclaw-bridge-dev-local -n logclaw-dev-local

# Check auto-created incidents
kubectl port-forward svc/logclaw-opensearch-dev-local 9200:9200 -n logclaw-dev-local &
curl -s 'http://localhost:9200/logclaw-incidents-*/_search?size=5&sort=created_at:desc' | python3 -m json.tool

# Or use the Dashboard
open http://localhost:3333/incidents

8 — Tear down

# Remove just the tenant
make uninstall TENANT_ID=dev-local

# Remove everything including the Kind cluster
make kind-delete

Repository Layout

charts/
├── logclaw-tenant/           # Umbrella chart — single install entry point
├── logclaw-platform/         # ESO SecretStore, cert-manager, RBAC
├── logclaw-kafka/            # Strimzi Kafka + KafkaConnect + MirrorMaker2
├── logclaw-otel-collector/   # OpenTelemetry Collector (OTLP gRPC + HTTP)
├── logclaw-opensearch/       # OpenSearch cluster via Opster operator
├── logclaw-flink/            # Flink ETL + enrichment + anomaly jobs
├── logclaw-bridge/           # OTLP ETL + trace correlation + lifecycle manager
├── logclaw-ml-engine/        # Feast + KServe/TorchServe + Ollama
├── logclaw-airflow/          # Apache Airflow
├── logclaw-ticketing-agent/  # AI-powered RCA + multi-platform ticketing
├── logclaw-dashboard/        # Next.js web UI
└── logclaw-zammad/           # In-cluster ITSM (zero-egress option)

apps/
├── dashboard/                # Next.js source (npm run dev for local development)
└── ticketing-agent/          # Python RCA microservice source

scripts/
├── setup-dev.sh              # One-command local dev setup
├── ingest-logs.sh            # Log ingestion helper
├── generate-applepay-logs.py # Generate 500 OTel sample logs (batch 1)
└── generate-applepay-logs-2.py # Generate 400 infra/security logs (batch 2)

operators/                    # Cluster-level operator bootstrap (once per cluster)
├── strimzi/                  # strimzi-kafka-operator 0.41.0
├── flink-operator/           # flink-kubernetes-operator 1.9.0
├── opensearch-operator/      # opensearch-operator 2.6.1
├── eso/                      # external-secrets 0.10.3
└── cert-manager/             # cert-manager v1.16.1

helmfile.d/                   # Ordered helmfile releases (00-operators → 90-dashboard)
gitops/                       # ArgoCD ApplicationSet + per-tenant value files
tests/                        # Helm chart tests + integration test pods
docs/                         # Architecture, onboarding, values reference

Key Features

Trace-Correlated AI Ticket Engine

The Bridge runs a 5-layer trace correlation engine:

  1. ETL Consumer — Consumes enriched logs from Kafka
  2. Anomaly Detector — Statistical anomaly scoring on error rates
  3. OpenSearch Indexer — Indexes logs for search and correlation
  4. Lifecycle Engine — Traces causal chains across services, computes blast radius, creates/deduplicates incidents

When an anomaly is detected, the system:

  • Queries all logs sharing the same trace_id
  • Builds a causal chain showing error propagation across services
  • Computes blast radius (% of services affected)
  • Creates a deduplicated incident ticket with full trace context

Multi-Platform Ticketing

The logclaw-ticketing-agent supports 6 independently-toggleable platforms simultaneously:

PlatformTypeEgress
PagerDutySaaSExternal HTTPS
JiraSaaSExternal HTTPS
ServiceNowSaaSExternal HTTPS
OpsGenieSaaSExternal HTTPS
SlackSaaSExternal HTTPS
ZammadIn-clusterZero external egress

Per-severity routing (critical → PagerDuty, medium → Jira, etc.) is configurable via config.routing.*.

Air-Gapped Mode

When only Zammad + Ollama are enabled, the needsExternalHttps helper sets the NetworkPolicy to zero external egress — fully air-gapped.

LLM Provider Abstraction

global:
  llm:
    provider: ollama   # claude | openai | ollama | vllm | disabled
    model: llama3.2:8b

Dashboard

The Dashboard provides:

  • Dark mode — system-aware with manual toggle (Light/Dark/System), persisted in localStorage
  • Drag-and-drop upload supporting JSON, NDJSON, CSV, and plain text files
  • Bulk incident actions — select multiple incidents and acknowledge/resolve/escalate in batch
  • CSV export — download incidents as a CSV file
  • Loading skeletons — smooth animated placeholders during data fetches
  • Error boundaries — graceful crash recovery with retry UI
  • LLM fallback badge — indicates when AI RCA is unavailable and rule-based fallback was used
  • Incident auto-deduplication — prevents duplicate incidents for the same anomaly

Log Ingestion — OTLP Native

LogClaw uses OTLP (OpenTelemetry Protocol) as its sole ingestion protocol — the CNCF industry standard supported by every major observability vendor (Datadog, Splunk, Grafana, AWS, GCP, Azure).

Supported transports:

  • gRPC<collector>:4317 (recommended for high-throughput)
  • HTTP/JSON<collector>:4318/v1/logs

Any OpenTelemetry SDK, agent, or collector can send logs directly to LogClaw without custom integrations. The OTel Collector enriches each log with tenant_id, batches them, and writes to Kafka using otlp_json encoding.

{
  "resourceLogs": [{
    "resource": {
      "attributes": [
        {"key": "service.name", "value": {"stringValue": "my-service"}},
        {"key": "host.name", "value": {"stringValue": "my-service-pod-abc12"}}
      ]
    },
    "scopeLogs": [{
      "logRecords": [{
        "timeUnixNano": "1709510400000000000",
        "severityText": "ERROR",
        "body": {"stringValue": "Something went wrong"},
        "traceId": "abcdef1234567890abcdef1234567890",
        "spanId": "abcdef12345678",
        "attributes": [
          {"key": "environment", "value": {"stringValue": "production"}}
        ]
      }]
    }]
  }]
}

See OTLP Integration Guide for Python, Java, and Node.js SDK examples.


Component Versions

ComponentVersion
Apache Kafka (Strimzi)3.7.0
Apache Flink1.19.0
OpenSearch2.14.0
External Secrets Operator0.10.3
cert-managerv1.16.1
Apache Airflow1.14.0
Zammad12.4.1
OpenTelemetry Collector Contrib0.114.0
KServe0.13.0
Feast0.40.0
Next.js (Dashboard)16.1.6

Development

Dashboard (local dev server)

cd apps/dashboard
npm install
npm run dev
# → http://localhost:3000

Ticketing Agent (local)

cd apps/ticketing-agent
pip install -r requirements.txt
export KAFKA_BROKERS="localhost:9092"
export OPENSEARCH_ENDPOINT="http://localhost:9200"
python main.py
# → HTTP API on :8080

Helm Charts

# Lint all charts
make lint

# Render templates (dry-run, no cluster needed)
make template TENANT_ID=ci-test

# Diff current vs new
make template-diff TENANT_ID=dev-local

# Package charts as .tgz
make package

# Push to OCI registry
make push HELM_REGISTRY=oci://ghcr.io/logclaw/charts

Docs


License

Apache 2.0 — see LICENSE

Reviews

No reviews yet

Sign in to write a review