A detective for your data. Zero-config data quality monitoring — works with dbt, Postgres, BigQuery, Snowflake. No YAML.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http
verified
reported
listed in the official MCP registry counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 1fe0b97 · analyzer v33 · 6d ago
danger signals2
- suspicious endpoint discord.com rbmuller-scherlok-1fe0b97/tests/test_explainer.py :231
url = "https://discord.com/api/webhooks/1/a" - suspicious endpoint discord.com rbmuller-scherlok-1fe0b97/tests/test_webhook.py :34
assert _detect_platform("https://discord.com/api/webhooks/123/abc") == "discord"
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 82
filesystem 20
- fs rbmuller-scherlok-1fe0b97/src/scherlok/cli.py :6
import shutil - fs rbmuller-scherlok-1fe0b97/src/scherlok/config.py :10
from pathlib import Path - fs rbmuller-scherlok-1fe0b97/src/scherlok/dashboard/render.py :6
from pathlib import Path - fs rbmuller-scherlok-1fe0b97/src/scherlok/dbt/manifest.py :7
from pathlib import Path - fs rbmuller-scherlok-1fe0b97/src/scherlok/dbt/profiles.py :13
from pathlib import Path - fs rbmuller-scherlok-1fe0b97/src/scherlok/dbt/run_results.py :6
from pathlib import Path - fs rbmuller-scherlok-1fe0b97/src/scherlok/store/remote.py :14
import shutil - fs rbmuller-scherlok-1fe0b97/src/scherlok/store/sqlite.py :6
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_config.py :5
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dashboard_assembler.py :4
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dashboard_cli.py :3
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dashboard_render.py :4
from pathlib import Path
show 8 more
- fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_cli.py :4
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_column_metrics.py :4
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_lineage.py :6
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_manifest.py :3
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_profiles.py :4
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_run_and_watch.py :5
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_dbt_run_results.py :4
from pathlib import Path - fs (weak) rbmuller-scherlok-1fe0b97/tests/test_store.py :4
from pathlib import Path
shell / exec 2
- shell rbmuller-scherlok-1fe0b97/src/scherlok/cli.py :7
import subprocess - shell rbmuller-scherlok-1fe0b97/src/scherlok/store/remote.py :15
import subprocess
network 8
- net rbmuller-scherlok-1fe0b97/src/scherlok/alerter/slack.py :3
import requests - net rbmuller-scherlok-1fe0b97/src/scherlok/alerter/webhook.py :11
import requests - net rbmuller-scherlok-1fe0b97/src/scherlok/connectors/duckdb.py :5
from urllib.parse import unquote, urlparse - net rbmuller-scherlok-1fe0b97/src/scherlok/connectors/mysql.py :5
from urllib.parse import urlparse - net rbmuller-scherlok-1fe0b97/src/scherlok/service.py :13
from urllib.parse import urlsplit, urlunsplit - net (weak) rbmuller-scherlok-1fe0b97/tests/test_alerter.py :44
@patch("scherlok.alerter.slack.requests.post") - net (weak) rbmuller-scherlok-1fe0b97/tests/test_explainer.py :213
with patch("scherlok.alerter.webhook.requests.post") as mock_post: - net (weak) rbmuller-scherlok-1fe0b97/tests/test_webhook.py :76
@patch("scherlok.alerter.webhook.requests.post")
secrets 2
- secrets rbmuller-scherlok-1fe0b97/src/scherlok/alerter/email.py :154
password = os.environ.get("SCHERLOK_SMTP_PASSWORD") - secrets rbmuller-scherlok-1fe0b97/src/scherlok/connectors/snowflake.py :59
password = os.environ.get("SNOWFLAKE_PASSWORD")
database 4
- db rbmuller-scherlok-1fe0b97/src/scherlok/connectors/postgres.py :6
import psycopg2 - db rbmuller-scherlok-1fe0b97/src/scherlok/store/sqlite.py :4
import sqlite3 - db (weak) rbmuller-scherlok-1fe0b97/tests/test_connector_errors.py :11
import psycopg2 - db (weak) rbmuller-scherlok-1fe0b97/tests/test_postgres.py :52
import psycopg2
declared dependencies 15
- mcp@>=1.2
- typer@>=0.9.0
- rich@>=13.0.0
- psycopg2-binary@>=2.9.0
- requests@>=2.28.0
- jinja2@>=3.0
- google-cloud-bigquery@>=3.0.0
- snowflake-connector-python@>=3.0.0
- pymysql@>=1.1
- duckdb@>=0.9
- pyyaml@>=6.0
- anthropic@>=0.40
show 3 more
- pytest@>=7.0.0
- pytest-cov@>=4.0.0
- ruff@>=0.1.0