MCP (Model Context Protocol) stdio server for DataSentry AI — a local-first data quality detection, explanation, and repair platform. Exposes 21 tools for scanning data files, analyzing quality issues, managing scheduled jobs, and handling PII encryption sessions.
DataSentry MCP server has 20 tools with schemas present but significant quality gaps. Tool names follow verb_noun convention (scan_file, list_issues, drift_compare) which is good. However, descriptions vary widely in quality, some are detailed (scan_file: 200+ chars with sampling/detector options), others are terse (detectors_list: 80 chars). Parameter descriptions are sparse or missing entirely across most tools. Output schemas are not documented in the visible code. Error handling guidance is absent. The server implements core MCP protocol (initialize, tools/list, tools/call) but lacks modern patterns like tool annotations (readOnlyHint, destructiveHint), structured error recovery, and per-request _meta logLevel. No evidence of pagination support despite tools like list_issues and trends_list that could return large result sets.
Same-dataset historical run comparison (Δ): schema changes, row-count delta, quality score delta, and issue distribution shift.
Validate a contract file (YAML/JSON) against a scan run: schema checks, column rules, quality gates. Returns validation result with pass/fail and detailed diagnostics.
Detector registry: built-in detectors + loaded plugins (V2-C, ADR-050). Each detector reports id, version, quality dimension, capabilities and support matrix.
Compare two historical scans of a dataset: schema, row-count, score and issue-distribution drift.
Drift between the two most recent scans of a dataset. Fails if fewer than two completed scans exist.
Register a scheduled quality-gate job (cron + optional quality gate). Returns job id and next scheduled run time.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. E.g., scan_file returns 'scan id, status, row count, quality score and issue counts' but no JSON schema visible.
Parameter descriptions missing or minimal. 'severity_at_least' in list_issues has no description; 'limit' in comparison_build has no description. LLMs cannot infer valid values or constraints.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like job_remove and pii_delete_session are destructive but unmarked. LLMs cannot distinguish safe reads from irreversible writes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Delete a scheduled job (Step 88). Returns success status.
Immediately trigger a scheduled job once (does not affect cron schedule). Returns scan run id and status.
Partially update a scheduled job (Step 88): cron, gate, enabled flag. Omitted fields are not changed.
List scheduled quality-gate jobs (Step 51/52): cron expression, last run, next run, status.
List quality issues across scans, optionally filtered by minimum severity (info/low/medium/high/critical) or a scan id.
Delete a PII encryption session (Step 100). Returns success status.
Delete PII encryption sessions older than N days (Step 103). Returns count of deleted sessions.
Restore plaintext from encrypted PII (explicit authorization, Step 100). Returns decrypted value.
Rotate PII encryption key (Step 102): re-encrypt all active sessions with new key. Returns count of re-encrypted sessions.
List PII encryption sessions (Step 100): session id, dataset, column, created_at, expires_at.
Scan-time column profile sidecar of a scan run (V6, ADR-061) as raw JSON.
Six-dimension quality score of a scan run (use list_issues or scan_file to obtain scan_run_id). Dimensions below 60 indicate risk.
Scan a data file (CSV/Parquet/JSONL/XLSX/DuckDB), a PostgreSQL table (postgresql://DSN, Step 55), a MySQL table (mysql://DSN, Step 56) or a cloud storage file (s3:// gs:// az:// CSV/Parquet/JSONL, Step 57) and persist the quality report. Returns scan id, status, row count, quality score and issue counts. Optional sampling (sampling_size or sampling_ratio; sampling_method random|reservoir|none, default reservoir; sampling_seed, default 42), detector whitelist and tags mirror the CLI (Step 76, ADR-076).
Cross-scan quality trends per dataset (V7 data surface, ADR-065): score/issues series with latest score, delta and direction. Optionally filter to one dataset.
No pagination support visible. list_issues, trends_list, jobs_list, pii_sessions could return unbounded results. No limit, offset, or cursor parameters documented.
Error handling guidance absent. No recovery hints in descriptions. E.g., if contract_validate fails, LLM has no guidance on what to try next or whether the error is retryable.