🏆 Hackathon Submission 2026

Metadata version-diff
intelligence for OpenMetadata

Know exactly what changed in your data catalog, when it changed, and how severe the impact is — from the CLI or directly inside Claude.

Get Started GitHub →
$ pip install "ometa-diff[mcp]"

Up and running in 3 steps

No heavy dependencies. No openmetadata-ingestion. Just pip install and go.

1

Start OpenMetadata

Run the official Docker Compose stack locally. Takes about 60 seconds to be ready.

bash
curl -sL https://bit.ly/3VIBsRL -o docker-compose.yml
docker compose up -d
2

Get your JWT token

Open Settings → Bots → Ingestion Bot in the OM UI. Copy the JWT token.

bash
export OPENMETADATA_HOST=\
  http://localhost:8585/api
export OPENMETADATA_JWT_TOKEN=\
  <your-jwt-token>
3

Install & run

Install the package, then diff any entity by its fully qualified name.

bash
pip install "ometa-diff[mcp]"

ometa-diff diff table \
  my_service.db.schema.payments

See what changed in your catalog

Three commands cover every observability need — entity diff, time-window changelog, and service-wide summary.

ometa-diff diff
ometa-diff changelog
--format json

Compare the two most recent versions of any metadata entity. Shows every field-level change with severity.

Command
ometa-diff diff table my_service.prod_db.public.payments
Terminal
$ ometa-diff diff table my_service.prod_db.public.payments   my_service.prod_db.public.payments (table) v0.2 -> v0.3 | Changed by: bob | 2026-04-20 09:15 UTC 2 changes: 1 major, 1 minor   ★ MAJOR columns.payment_method - REMOVED - {'name': 'payment_method', 'dataType': 'VARCHAR'} ● MINOR owner - MODIFIED - data_team + payments_team

Field-by-field breakdown

Severity Field Change Old Value New Value
★ MAJOR columns.payment_method REMOVED VARCHAR — Payment method used
● MINOR owner MODIFIED data_team payments_team

Severity rules: MAJOR = column removed / dataType changed / owner removed  ·  MINOR = description / tag / owner changed  ·  PATCH = cosmetic fields

Aggregate all changes across a service, user, or entity type over a configurable time window.

Command
ometa-diff changelog --service my_service --since 7d
Terminal
$ ometa-diff changelog --service my_service --since 7d   Catalog Changelog: service:my_service 2026-04-13 -> 2026-04-20   4 entities changed | 11 changes | 2 major 7 minor 2 patch Top changers: alice (5) bob (4) data-ingest-bot (2)   --- Entities ------------------------------------- * my_service.prod_db.public.payments 2 changes (v0.2->v0.3) * my_service.prod_db.public.orders 4 changes (v0.5->v0.7) * my_service.prod_db.public.customers 3 changes (v0.1->v0.2) * my_service.prod_db.public.products 2 changes (v0.3->v0.4)
By user
ometa-diff changelog \
  --user alice --since 30d
By entity type
ometa-diff changelog \
  --type table --since 7d

Every command supports --format json and --format markdown for programmatic use and CI pipelines.

Command
ometa-diff diff table my_service.prod_db.public.payments --format json
JSON Output
{
  "entity_type": "table",
  "entity_fqn": "my_service.prod_db.public.payments",
  "from_version": "0.2",
  "to_version": "0.3",
  "updated_by": "bob",
  "is_major": true,
  "summary": "2 changes: 1 major, 1 minor",
  "changes": [
    {
      "field_path": "columns.payment_method",
      "change_type": "removed",
      "severity": "major",
      "old_value": { "name": "payment_method", "dataType": "VARCHAR" },
      "new_value": null
    },
    {
      "field_path": "owner",
      "change_type": "modified",
      "severity": "minor",
      "old_value": "data_team",
      "new_value": "payments_team"
    }
  ]
}

Ask Claude about your catalog

ometa-diff ships as a Model Context Protocol server — drop it into any MCP-compatible client and your AI assistant gains live metadata diff intelligence.

🤖
Claude / Cursor
MCP Client
ometa-diff
MCP Server (STDIO)
🗄️
OpenMetadata
REST API

Claude Desktop config

~/.config/claude/claude_desktop_config.json
{
  "mcpServers": {
    "ometa-diff": {
      "command": "uvx",
      "args": ["--from", "ometa-diff[mcp]", "ometa-diff", "serve"],
      "env": {
        "OPENMETADATA_HOST": "http://localhost:8585/api",
        "OPENMETADATA_JWT_TOKEN": "<your-jwt-token>"
      }
    }
  }
}

Three tools exposed to the LLM

🔍

metadata_diff

Field-by-field diff between two versions of any entity. Triggered by: "What changed in the payments table?"

📋

metadata_changelog

Aggregate changes across a service, user, or entity type. Triggered by: "What did alice change this week?"

📊

metadata_change_summary

Catalog-wide activity stats — total changes, severity breakdown, top changers. Covers tables, dashboards, pipelines, topics.

Claude Desktop — example conversation
User: What changed in the payments table recently?   Claude: [calling metadata_diff…]   The payments table had 2 changes between v0.2 and v0.3:   ⚠ MAJOR columns.payment_method was removed. This is a breaking change — any downstream pipeline reading this column will fail. Immediate review recommended.   ● MINOR The owner changed from data_team to payments_team (changed by bob on 2026-04-20).   User: Show me all major changes across the whole catalog this week.   Claude: [calling metadata_change_summary…]   In the last 7 days across tables, dashboards, pipelines and topics: • 2 MAJOR changes • 7 MINOR2 PATCH Top changers: alice (5), bob (4), data-ingest-bot (2)

Built for the AI-native data team

OpenMetadata already stores every version of every entity. ometa-diff makes that history actionable.

🚫

No heavy deps

Uses httpx directly — no openmetadata-ingestion, no JVM, no Spark.

🎯

Severity-aware

Automatically classifies every change as MAJOR, MINOR, or PATCH so you know what actually matters.

🔌

Any MCP client

Works with Claude Desktop, Cursor, VS Code + Copilot, Windsurf, Zed — any client that speaks MCP.

📦

pip installable

One command, three interfaces: CLI, Python library, and MCP server — all from the same package.