GitHub
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
Description from the maker (original English)
Zero-config data-quality monitoring: profile a warehouse, detect anomalies, gate CI.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
SCHERLOK_CONNECTIONValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"scherlok": {
"command": "uvx",
"args": [
"scherlok"
],
"env": {
"SCHERLOK_CONNECTION": "your-value"
}
}
}
}Run this in your terminal
claude mcp add scherlok --env SCHERLOK_CONNECTION=your-value -- uvx scherlokFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"scherlok": {
"command": "uvx",
"args": [
"scherlok"
],
"env": {
"SCHERLOK_CONNECTION": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"scherlok": {
"type": "stdio",
"command": "uvx",
"args": [
"scherlok"
],
"env": {
"SCHERLOK_CONNECTION": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account rbmuller, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: SCHERLOK_CONNECTION
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.3.0) reached the registry 2 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: GitHub, Desktop Commander, Cloudflare MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
GitHub’s official server lets AI read and manage code, issues and pull requests in your account. Use GitHub’s hosted version or run it locally with Docker.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Scherlok
Zero-config anomaly detection for your database tables.
No YAML, no rules, no thresholds. Scherlok learns what "normal" looks like, then tells you when something changes.
pip install scherlok
scherlok ci postgres://user:pass@host/db # first run: baseline + new-table checks; every run after: drift
No database handy? The demo seeds one, learns it, breaks it, and catches it, in about a second:
uvx --from "scherlok[duckdb]" scherlok demo
Works with PostgreSQL, BigQuery, Snowflake, MySQL, DuckDB and dbt. Alerts go to Slack, Discord, Teams, email, or your CI exit code.
Every data team has the same nightmare:
A source API silently changes from dollars to cents. Revenue dashboards show wrong numbers for 3 weeks before anyone notices.
A column starts returning NULLs. A table stops updating. Row counts drop 40% on a Tuesday. Nobody knows until the CEO asks why the report looks weird.
Current tools (Great Expectations, Soda, dbt tests) require you to define what "correct" looks like before you can detect what's wrong. Hundreds of rules. Dozens of YAML files. And you still miss things — because you can't write rules for problems you haven't imagined yet.
| Anomaly | What Happened | Severity |
|---|---|---|
| Volume drop | Row count dropped 40% overnight | CRITICAL |
| Volume spike | 3x more rows than normal | WARNING |
| Freshness alert | Table hasn't updated in 12h (normally every 2h) | CRITICAL |
| Schema drift | Column removed or type changed | CRITICAL |
| NULL surge | NULL rate jumped from 2% to 45% | CRITICAL |
| Distribution shift | Column mean shifted 3+ standard deviations (Shewhart-style control limit) | INFO, WARNING above 5σ |
| Cardinality explosion | Status column went from 5 values to 500 | CRITICAL |
| Broken new table | First sighting, no baseline yet: the table is empty, a column is NULL in every row, or its id / _id has duplicates | WARNING (CRITICAL under verify --table) |
| Constant column | First sighting: one value in 100+ non-NULL rows | INFO |
Every anomaly is auto-scored: INFO, WARNING, or CRITICAL. No thresholds to configure.
A table seen for the first time has nothing to compare against, so it gets the new-table checks instead, from the profile already collected. They report WARNING (INFO for a constant column), so a legitimately empty table doesn't fail ci with the default --fail-on critical; once the table has a baseline they never run again. scherlok verify --table treats the tables it names as just built, so an empty table, an all-NULL column or a duplicate key in one of them is CRITICAL.
Scherlok takes the opposite approach of rule-based tools: learn first, then detect.
scherlok connect postgres://user:pass@host/db # connect once
scherlok investigate # learn your data scherlok watch # detect anomalies
Three commands. Five minutes. Done. (scherlok ci runs all three in one step for pipelines.)
After five valid profiles, Scherlok learns per-metric variability from the latest 30 profiles using robust historical baselines for volume, numeric mean shifts, NULL rates, and distinct counts. During cold start or when history is not usable, it keeps the conservative fixed defaults.
Every run is learned, except one that finds a CRITICAL anomaly on a table: that table keeps its baseline, so the alert repeats on every run until the data recovers, and the broken state never becomes the new normal. WARNING and INFO findings are learned. When the change is intended, such as a planned backfill, a person makes it the new normal with scherlok accept (below).
investigate — Learn the patterns$ scherlok investigate
Profiling 12 tables... ✓ users — 45,231 rows, 8 columns ✓ orders — 1,203,847 rows, 15 columns ✓ products — 892 rows, 12 columns ... Done. Profiles saved.
Scherlok profiles every table: row counts, column types, NULL rates, value distributions, freshness cadence, cardinality. Stores everything locally in SQLite, as aggregates only: no value from your rows is saved (what Scherlok stores).
watch — Detect anomalies$ scherlok watch
Checking 12 tables against learned profiles...
🔴 CRITICAL orders volume_drop Row count dropped 52% (1,203,847 → 578,412) 🟡 WARNING users null_increase Column "email": NULL rate 2.1% → 18.7% 🔵 INFO products distribution Column "price": mean shifted 3.2σ
3 anomalies detected. Exit code: 1
# Slack
scherlok watch --webhook https://hooks.slack.com/services/...
scherlok watch --webhook https://discord.com/api/webhooks/...
scherlok watch --webhook https://outlook.office.com/webhook/...
scherlok watch --webhook https://my-api.com/alerts
pip install 'scherlok[schedule]' scherlok watch --schedule "0 6 * * *"
Auto-detects Slack, Discord, and Teams from the URL and formats the payload accordingly. Any other URL receives a generic JSON payload.
Use Scherlok as a data quality gate on pull requests. The GitHub Action checks the change against the stored baseline, fails the check on anomalies and keeps one comment on the pull request up to date with the table, column, metric, baseline, current value and severity of each:
# .github/workflows/data-checks.yml
on: pull_request permissions: contents: read pull-requests: write jobs: scherlok: runs-on: ubuntu-latest steps:
The connection is passed through the environment and masked, the comment never holds a value read from a row, and fork pull requests, which get no secrets, are skipped with a notice. 📖 GitHub Action guide →
Anywhere else, the ci command does it in one line. If Scherlok detects a critical anomaly, the pipeline fails:
scherlok config --store s3://my-bucket/scherlok/profiles.db
scherlok ci "$DATABASE_URL" --webhook "$SLACK_WEBHOOK" --fail-on critical
ci learns every run without a CRITICAL anomaly, so after a failure on --fail-on warning the new state becomes the baseline and a retry passes. When a retry must keep failing until the data is fixed, as with an AI agent or a CI job that retries, gate with verify. It compares against the stored baseline and saves no profiles, no anomalies and no config, and it never uploads a remote store; it only records the run.
scherlok verify --table orders --fail-on critical # exit 1 while orders is still broken
scherlok verify --output json # one JSON object on stdout scherlok verify --record scherlok-runs.jsonl # append the run record, e.g. a CI artifact scherlok verify --against postgresql://db.example.com/shop --ignore volume # a dev build vs production
--against compares the connection's tables, such as a dev build, with another database's baseline in the same store, such as production's, and saves nothing under either: a dropped column fails before the change ships. --ignore volume is for builds on sampled data: row counts are not compared, and the column checks only flag what a sample can't explain.
Tables without a baseline are listed under tables_without_baseline, never counted as verified. Those you name with --table count as just built: an empty table, a column NULL in every row or a duplicate key there is CRITICAL, so an agent can gate on a table it just created. Every watch, ci, check and verify run is recorded, passing or not: scherlok history --runs lists them. Every anomaly in the JSON also carries column, metric, baseline, current, change_pct and a fixed hint, so it can be acted on without parsing the message. 📖 CI/CD gate guide →
A table's own history can't catch a join that fans out on its first build, or a total that changes while the row count stays the same. reconcile compares a pipeline's output with its input, in the same database, and exits 1 when they don't add up:
scherlok reconcile --source raw.orders --target mart.orders \
--key order_id --sum amount --tolerance 0.001
It reports row_count_mismatch, duplicate_keys (a key repeated in the target: join fan-out), missing_keys, extra_keys and sum_mismatch (totals apart by more than the absolute --tolerance), all CRITICAL, with --output json for CI. It needs no baseline and saves nothing, and it reports counts and totals only, never a key value. On BigQuery and Snowflake every run scans both tables in full. 📖 Reconcile guide →
A CRITICAL reading is never learned, so an intended change (a new column, a planned backfill) keeps alerting until a person accepts it:
scherlok accept --table orders --reason "Backfilled 2025 orders" # shows before/after, asks to confirm
scherlok accept --table orders --reason "..." --yes # no prompt, for a workflow a person triggers scherlok history --approvals # who accepted what, and why
accept re-profiles the table, shows its rows, columns and anomalies against the current baseline, and on confirmation saves the new state as the baseline with one row in an append-only approvals table: who approved (git config user.email, else $USER), the reason, and the before/after summary. --reason is required.
To keep agents and scheduled runs from moving baselines at all, lock them: scherlok config --baseline-locked or SCHERLOK_BASELINE_LOCKED=1. Then only accept writes a baseline, including a new table's first one; watch, ci, check, dbt and the MCP tools compare without saving profiles, and `inves
Only the beginning is shown; read the rest in the repo