Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

jDataMunch MCP

PYPI · JDATAMUNCH-MCP · SCANNED SEP 20

Tabular data retrieval. Index CSV/Excel, query rows, aggregate. 99%+ savings vs raw file reads.

Available components

−1 this week 80 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 0 of 30 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency32
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • License check failed: no license is declared. See how to fix → Fail
  • Actively maintained (last published 19 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability82
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6333 tokens (~158/item across 40 items; 39 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 95% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_dataset" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 41 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the jDataMunch MCP server?

jDataMunch MCP runs locally as a PyPI package, launched with uvx jdatamunch-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · jdatamunch-mcp

# add to Claude Code
claude mcp add jgravelle-jdatamunch-mcp -- uvx jdatamunch-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "jgravelle-jdatamunch-mcp": {
      "command": "uvx",
      "args": [
        "jdatamunch-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "jgravelle-jdatamunch-mcp": {
      "command": "uvx",
      "args": [
        "jdatamunch-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add jgravelle-jdatamunch-mcp -- uvx jdatamunch-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jgravelle-jdatamunch-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "jdatamunch-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add jgravelle-jdatamunch-mcp --command uvx --arg jdatamunch-mcp
# ~/.hermes/config.yaml
mcp_servers:
  jgravelle-jdatamunch-mcp:
    command: "uvx"
    args: ["jdatamunch-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "jgravelle-jdatamunch-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "jdatamunch-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add jgravelle-jdatamunch-mcp -t stdio -c uvx -a jdatamunch-mcp
// mcp.json
{
  "mcpServers": {
    "jgravelle-jdatamunch-mcp": {
      "command": "uvx",
      "args": [
        "jdatamunch-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 −2
    • Security disclosure: pass → unverified functional
    • Stability: pass → 0.90 functional
  • 19 Sept 26 0
    • Stability: 0.97 → pass security
  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 −1
    • Stability: pass → 0.90 functional
  • 15 Sept 26 +15
    • Malware scan: unverified → pass security
    • Stability: 0.97 → pass security
  • 14 Sept 26 −14
    • Malware scan: pass → unverified security
  • 12 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 10 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed pypi/jdatamunch-mcp@1.31.13

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 30 packages
Packages resolved 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 39 exposed · ~6,053 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
aggregate ~339

Server-side aggregations (GROUP BY). Saves orders of magnitude in tokens vs returning rows for the LLM to aggregate. Functions: count, sum, avg, min, max, count_distinct, median. limit capped at 1000.

NameTypeReqDescription
aggregationsarrayyesAggregation specs. Use column='*' for COUNT(*).
approximatebooleanApproximate-mode aggregation (C1). Routes count_distinct → HyperLogLog (~2% error), median → t-digest (~1% error), sum/avg → sampled estimator with 95% confidence interval. Whole-dataset only.
datasetstringyesDataset identifier
filtersarrayPre-filter rows before aggregating (same syntax as get_rows)
group_byarrayGroup-by columns. Empty = whole-dataset aggregate.
havingarrayPost-aggregation filter on aggregation aliases (B11). Each item: {"column": <alias>, "op": eq|neq|gt|gte|lt|lte|in|between|is_null, "value": ...}
limitintegerMax groups returned (default 50)
order_bystringColumn or alias to sort by
order_dirstring
redactbooleanScrub PII / credentials from group-by column values (default true). Aggregate values (counts, sums, etc.) are never altered.
redact_patternsarrayAdditional Python regex patterns to layer on top of the built-in set.
redact_skip_columnsarrayGroup-by column names to exempt from redaction.

No output schema declared.

No examples provided.

analyze_perf ~166

Per-tool latency and cache-hit telemetry. Returns p50/p95/max latency and error rate per tool, the slowest tools by p95, and result-cache hit rates (aggregate / get_correlations / get_data_hotspots are the cached tools). window=session reads the always-on in-memory ring; window=1h/24h/7d/all reads the persistent SQLite sink (requires JDATAMUNCH_PERF_TELEMETRY=1). Sibling of jcodemunch / jdocmunch analyze_perf.

NameTypeReqDescription
toolstringRestrict the analysis to a single tool name.
topintegerMax slowest-tools / coldest-caches returned.
windowstringsession = in-memory ring; others read the persistent perf db.

No output schema declared.

No examples provided.

check_column_drop_safe ~135

Composite preflight: is this column safe to drop? Fuses four signals — primary-key status, foreign-key participation, cross-dataset name match, and runtime traffic — into a single verdict plus ranked blockers and a recommended_action. Verdict tiers: pk_blocking, fk_blocking, runtime_observed, cross_dataset_blocking, safe_to_drop. Read-only. The killer feature of the Phase-1 sibling-parity batch.

NameTypeReqDescription
columnstringyesColumn name (case-insensitive).
dataset_idstringyes
window_daysintegerLook-back window for runtime traffic. Default 30.

No output schema declared.

No examples provided.

check_embedding_drift ~170

Detect whether the embedding provider has drifted since it was pinned. Column embeddings power semantic search_data and find_similar_columns; if the provider model changes underneath a stored index, saved vectors stop matching the live encoder and semantic ranking quietly degrades. Pins a 16-string canary in <index_path>/embed_canary.json and recomputes it on demand, reporting cosine drift. Call with force=true once to set the baseline, then again after a suspected provider change. Sibling of jcodemunch / jdocmunch check_embedding_drift.

NameTypeReqDescription
forcebooleanRe-embed and re-pin the canary baseline (set once to establish it).
thresholdnumberCosine-distance alarm threshold; alarm is true when the worst canary drifts past it.

No output schema declared.

No examples provided.

data_health_radar ~139

Six-axis health radar for a dataset: null_health, type_confidence, cardinality_health, pk_presence, semantic_coverage, schema_stability (omitted when <2 history snapshots). Optional 7th axis runtime_coverage when traces ingested. Returns 0-100 score per axis + composite + A-F grade. Pairs with diff_data_health_radar for snapshot deltas. Mirrors jcm's six-axis health radar.

NameTypeReqDescription
datasetstringyes
include_runtimebooleanFuse runtime_coverage axis when traces exist.
window_daysintegerLookback for the runtime axis. Default 30.

No output schema declared.

No examples provided.

delete_dataset ~53

Delete an indexed dataset and its SQLite store. Frees disk space. Irreversible — the dataset must be re-indexed to use again.

NameTypeReqDescription
datasetstringyesDataset identifier to delete (from list_datasets)

No output schema declared.

No examples provided.

describe_column ~187

Deep profile of a single column. Full value distribution for low-cardinality columns, histogram bins for numeric, temporal range for datetime. top_n capped at 200; histogram_bins capped at 50.

NameTypeReqDescription
columnstringyesColumn name or column ID (e.g. 'lapd-crime::AREA NAME#column')
datasetstringyesDataset identifier
histogram_binsintegerBins for numeric histograms (default 10)
redactbooleanScrub PII / credentials from value_distribution, top_values, and sample_values (default true). Numeric stats and counts are never altered. Set false for raw values when working with data you own.
redact_patternsarrayAdditional Python regex patterns to redact on top of the built-in set.
top_nintegerTop values to return for categorical columns (default 20)

No output schema declared.

No examples provided.

describe_dataset ~133

Primary orientation tool. Returns every column's name, type, cardinality, null%, and sample values. A single call replaces reading the entire source file. Equivalent to opening a spreadsheet and reading the column headers + stats. On wide tables (60+ columns), results are auto-paginated — use columns=[] to select specific ones, or columns_offset to page through remaining columns.

NameTypeReqDescription
columnsarrayFilter to specific columns (default: all)
columns_offsetintegerPagination offset for wide tables (default 0)
datasetstringyesDataset identifier (from list_datasets or index_local)

No output schema declared.

No examples provided.

diff_data_health_radar ~107

Diff two data_health_radar payloads. Pure function — pass the `radar` sub-field from two data_health_radar responses (e.g. yesterday vs today). Returns per-axis deltas, composite delta, grade change, regression and improvement lists (threshold: 3 points), one-line verdict.

NameTypeReqDescription
baselineobjectyesBaseline radar payload (e.g. yesterday's snapshot).
currentobjectyesCurrent radar payload (e.g. today's snapshot).

No output schema declared.

No examples provided.

embed_dataset ~94

Precompute column embeddings for semantic search. Optional warm-up — search_data with semantic=true lazily embeds on first use. Running embed_dataset upfront eliminates that latency. Requires an embedding provider (JDATAMUNCH_EMBED_MODEL, GOOGLE_API_KEY, or OPENAI_API_KEY).

NameTypeReqDescription
datasetstringyesDataset identifier (from list_datasets)
forcebooleanRecompute all embeddings even if cached (default false)

No output schema declared.

No examples provided.

finalize_handoff ~311

Finalize one canonical Markdown handoff for a completed data audit/analysis (jdatamunch.handoff/v1; suite parity with jCodeMunch). The server assembles YOUR sections deterministically, validates every evidence_refs entry against what this session actually retrieved (column ids like '<dataset>::<column>#column' or dataset names served by search_data / describe_dataset / describe_column — unknown refs fail closed), persists the result session-scoped, and returns a compact receipt {handoff_id, resource_uri, sha256, length, canonical:true}. Read the immutable body via the munch://handoff/<id> resource; repeated reads are byte-identical. Appendices are included exactly once; no character limit; never writes to your data.

NameTypeReqDescription
appendicesarrayOptional named appendices, each {name, content, content_type?}; names must be unique.
datasetstringyesDataset the handoff is about.
evidence_refsarrayyesColumn ids or dataset names retrieved this session; validated against the session retrieval record.
profilestringHandoff profile label (e.g. data_audit).
sectionsarrayyesOrdered report sections, each {heading, content} (markdown). The caller authors these; the server only assembles. Optional per-section claims[] bind evidence to an individual claim instead of one glo…
taskstringyesThe task/question this handoff answers (becomes the title).

No output schema declared.

No examples provided.

find_similar_columns ~199

Multi-signal cross-dataset column consolidation. Fuses name (token Jaccard), type, top-value overlap, cardinality similarity, and (when present) embedding cosine into a composite score. Clusters via union-find and classifies each cluster: near_duplicate, naming_drift, parallel_definition, or overlapping_topic. Use to find duplicate columns across datasets, surface naming drift (`email` vs `email_address`), or detect the same conceptual column spread across multiple datasets. Mirrors jcm's find_similar_symbols. Every signal is heuristic, so a high score means investigate, not merge.

NameTypeReqDescription
datasetsarrayDatasets to scan. Omit to scan every indexed dataset.
min_scorenumberComposite-score floor for surfacing pairs.
same_type_onlybooleanDrop pairs where types don't match.
top_nintegerMax clusters returned. Default 50, capped at 200.

No output schema declared.

No examples provided.

find_unused_columns ~174

Surface columns with zero or stale runtime traffic. Reads runtime_query_calls (populated by ingest_sql_log) and surfaces columns that haven't been queried within `window_days`. Excludes primary-key candidates and audit fields (created_at / updated_at / dbt_*) by default. Refuses to run with explicit error when no runtime data has been ingested — would otherwise trivially flag every column.

NameTypeReqDescription
dataset_idstringyes
exclude_auditbooleanSkip audit columns (created_at, updated_at, dbt_*, etc). Default true.
exclude_pkbooleanSkip primary-key candidates. Default true.
min_callsintegerFloor for 'considered used' within window. Default 0.
window_daysintegerLook-back window. Default 30.

No output schema declared.

No examples provided.

get_correlations ~157

Compute pairwise Pearson correlations between numeric columns. Returns pairs sorted by |r| descending, filtered to significant correlations. Use this to discover relationships in the data without manual exploration. top_n capped at 200.

NameTypeReqDescription
columnsarrayRestrict to specific numeric columns (default: all numeric)
datasetstringyesDataset identifier
methodstringCorrelation method (default 'pearson'). Spearman is rank-based — robust to outliers and monotonic non-linear relationships (B10).
min_abs_correlationnumberMinimum |r| to include in results (default 0.3)
top_nintegerMax pairs to return (default 20, max 200)

No output schema declared.

No examples provided.

get_data_hotspots ~167

Return the highest-risk columns in a dataset ranked by a composite score combining: null rate, cardinality anomalies, numeric outlier spread, and (v1.10.0) runtime traffic from runtime_query_calls when traces exist. When include_runtime is true but no traces are ingested, the response carries an honest-hint caveat in _meta.runtime_caveat rather than silently scoring on static signals alone. top_n capped at 50.

NameTypeReqDescription
datasetstringyesDataset identifier
include_runtimebooleanFuse traffic signal from runtime_query_calls when available.
top_nintegerNumber of hotspot columns to return (default 10, max 50)
window_daysintegerLookback window for the traffic signal. Default 30.

No output schema declared.

No examples provided.

get_dataset_health ~78

Composite quality grade (A–F) for a dataset (B4). Combines null severity, type-confidence, constant-column count, primary-key presence, semantic-typing coverage, and drift history into a single score with a structured breakdown. Grades structure and completeness, not whether the values are right.

NameTypeReqDescription
datasetstringyesDataset identifier

No output schema declared.

No examples provided.

get_dataset_history ~80

Return the last N profile snapshots for a dataset. Snapshots are appended on every successful index_local — use this to detect schema/content drift over multiple ingests of the same dataset. n capped at 50.

NameTypeReqDescription
datasetstringyesDataset identifier
nintegerNumber of snapshots to return (default 10, max 50)

No output schema declared.

No examples provided.

get_distribution ~119

Unified bin-counts for any column type (B8). Numeric → equal-width bins between min/max; datetime → time-bucket bins; categorical / string → top-n + 'other' bucket. Token-cheap way to ask 'what does this column look like?'. Bin counts only (default 20 bins); it never returns the underlying rows.

NameTypeReqDescription
binsintegerNumber of bins / categories to return (default 20, max 100)
columnstringyesColumn name
datasetstringyesDataset identifier

No output schema declared.

No examples provided.

get_redaction_log ~128

Forensic accounting of PII redactions for a dataset. Returns per-pattern counts from runtime_redaction_log (populated by ingest_sql_log with redact=True), so operators can verify the chokepoint is firing on production traffic. Filter by source and lookback window. Empty result with no traces ingested is not an error — it just means no scrubbing has happened yet.

NameTypeReqDescription
dataset_idstringyes
since_daysintegerLookback window for last_seen. Default 30.
sourcestringOptional source filter. Today: 'sql_log'.

No output schema declared.

No examples provided.

get_rows ~353

Filtered row retrieval via structured filters. All filters are SQL-parameterized (no injection). Operators: eq, neq, gt, gte, lt, lte, contains, in, is_null, between. Use columns=[] to project — reduces tokens significantly on wide tables. Prefer aggregate() for summaries over paginating through rows. Returns at most limit rows (default 50); page with offset instead of raising it.

NameTypeReqDescription
columnsarrayColumn projection — reduces tokens (default: all)
datasetstringyesDataset identifier
filtersarrayFilter conditions (ANDed). E.g. [{"column": "AREA NAME", "op": "eq", "value": "Hollywood"}]
limitintegerMax rows returned (default 50, hard cap 500)
offsetintegerPagination offset (default 0)
order_bystringColumn to sort by
order_dirstringSort direction (default 'asc')
redactbooleanScrub PII / credentials (emails, SSNs, Luhn-valid credit cards, JWTs, API keys, PEM blocks, AWS keys, GitHub/Slack tokens) from row cells before return (default true). Numeric cells are never altered…
redact_patternsarrayAdditional Python regex patterns to layer on top of the built-in set. Invalid patterns are silently skipped (reported in _meta.redaction.invalid_custom_patterns).
redact_skip_columnsarrayColumn names to exempt from redaction (e.g. an `email_hashed` column where the email pattern would false-positive).

No output schema declared.

No examples provided.

get_schema_drift ~114

Compare schema (columns, types, nullability) between two indexed datasets. Detects added/removed columns, type changes, and null-rate shifts. Pure in-memory comparison — no re-reading source files. Useful for detecting schema changes between dataset versions. Assessment: 'identical' | 'additive' (only additions) | 'breaking' (removals or type changes).

NameTypeReqDescription
dataset_astringyesFirst dataset identifier (baseline)
dataset_bstringyesSecond dataset identifier (comparison target)

No output schema declared.

No examples provided.

get_schema_impact ~176

Transitive impact of a column-level schema change (drop_column, rename_column, retype_column). Walks the inferred FK graph to max_depth, surfaces direct + transitive hits across datasets, and normalises blast_score to [0, 1]. For retype_column, also flags type_mismatch entries at FK edges whose partner type wouldn't survive the retype. Read-only.

NameTypeReqDescription
columnstringyesColumn name (case-insensitive).
dataset_idstringyes
kindstring
max_depthintegerBFS depth over the inferred FK graph.
new_namestringRequired for rename_column.
new_typestringRequired for retype_column. e.g. integer / string / float.
window_daysintegerRuntime traffic look-back.

No output schema declared.

No examples provided.

get_session_stats ~32

Return cumulative token savings and cost avoided across all tool calls. Savings are modelled estimates, not per-call measurements.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

index_local ~264

Index a local data file (CSV, Excel, Parquet, or JSONL). Profiles all columns, detects types, computes statistics, and loads rows into SQLite for fast filtered retrieval. Set incremental=true (default) to skip re-indexing if file is unchanged. CSV, Excel, Parquet and JSONL only; any other format is rejected.

NameTypeReqDescription
delimiterstringCSV delimiter override (auto-detected if omitted)
depthstringProfiling depth (B7). 'shallow' caps at 100k rows for fast first-look; 'standard' is the full profile (default); 'deep' additionally precomputes correlations.
encodingstringFile encoding override (auto-detected if omitted)
header_rowintegerRow number containing column headers, 0-indexed (default 0)
incrementalbooleanSkip re-index if file hash unchanged (default true)
namestringDataset identifier override (defaults to filename stem)
pathstringyesAbsolute path to data file (.csv, .tsv, .xlsx, .xls, .parquet, .jsonl, .ndjson)
sheetstringExcel sheet name to index (default: first sheet)

No output schema declared.

No examples provided.

index_repo ~163

Index data files from a GitHub repository. Discovers CSV, Excel, Parquet, and JSONL files, downloads them, and indexes each via the same pipeline as index_local. Datasets are named {owner}--{repo}--{filename}. Max 50 MB per file, 20 files per repo. Set GITHUB_TOKEN env var for private repos or to avoid rate limits.

NameTypeReqDescription
github_tokenstringGitHub token override (defaults to GITHUB_TOKEN env var)
incrementalbooleanSkip re-index if HEAD SHA unchanged (default true)
urlstringyesGitHub repo URL or owner/repo string (e.g. 'pandas-dev/pandas' or 'https://github.com/pandas-dev/pandas')

No output schema declared.

No examples provided.

ingest_sql_log ~212

Ingest a SQL log file (pg_stat_statements CSV or generic JSONL, .gz transparently) into the per-dataset runtime tables. Each query is parsed for table + column refs, redacted at the chokepoint (string + numeric literals + cell-PII registry), and rolled up into runtime_query_calls keyed by (fingerprint, table, column). Tables in the log that don't match any indexed dataset count as unmapped. Foundational primitive for find_unused_columns, check_column_drop_safe, and data_health_radar (v1.6.0 sibling-parity Phase 1).

NameTypeReqDescription
file_pathstringyesPath to a CSV / JSONL / .gz log file.
max_rowsintegerHard cap on ingested rows. Default 100000.
redactbooleanScrub PII / literals before persisting. Default true.
sourcestringpg_stat_statements | jsonl | auto (default — sniff by extension).

No output schema declared.

No examples provided.

jdatamunch_guide ~104

Return the version-current CLAUDE.md / AGENT.md policy snippet for jdatamunch-mcp. Lets an agent keep a one-line CLAUDE.md (e.g. "Call jdatamunch_guide and strictly follow its instructions.") instead of pasting a static snippet that drifts from the installed version. Idempotent, no dataset context required. Sibling of jcodemunch_guide and jdocmunch_guide.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

join_datasets ~289

Join two indexed datasets via SQL JOIN. Uses ATTACH DATABASE to combine two SQLite stores into one query. Supports inner, left, right, and cross joins. Use columns_a/columns_b to project — reduces tokens on wide tables. Row limit capped at 500. Prefer aggregate() on join results for summaries.

NameTypeReqDescription
columns_aarrayColumns to select from dataset_a (default: first 30)
columns_barrayColumns to select from dataset_b (default: first 30)
dataset_astringyesFirst dataset identifier (left side of join)
dataset_bstringyesSecond dataset identifier (right side of join)
filters_aarrayPre-filter dataset_a rows (same syntax as get_rows filters)
filters_barrayPre-filter dataset_b rows (same syntax as get_rows filters)
join_column_astringyesColumn from dataset_a to join on
join_column_bstringyesColumn from dataset_b to join on
join_typestringJoin type (default 'inner')
limitintegerMax rows returned (default 50, hard cap 500)
offsetintegerPagination offset (default 0)
order_bystringColumn to sort results by
order_dirstringSort direction (default 'asc')

No output schema declared.

No examples provided.

list_datasets ~56

List every indexed dataset with its row count, column count, and source file. Call it first to find the dataset name every other tool needs, and to confirm a file was actually indexed. Lists only datasets under the active storage_path.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_repos ~57

List GitHub repositories indexed via index_repo. Shows repo name, HEAD SHA, dataset count, total rows, and dataset names for each repo. Covers repos indexed with index_repo only; a dataset added by index_local is not listed here.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

plan_query ~100

Map a natural-language intent into a ranked tool-call sequence for the given dataset (B3). Pure routing — no LLM call. Built-in intents: summarize, anomalies, compare, join, filter, trend, correlate.

NameTypeReqDescription
datasetstringyesDataset identifier
intentstringNatural-language intent (e.g. 'summarize', 'find anomalies', 'join with X', 'trend over time'). Default 'summarize'.

No output schema declared.

No examples provided.

run_sql ~215

Read-only sandboxed SQL escape hatch (B1). Accepts a single SELECT (or WITH … SELECT) statement. The first dataset is the main connection; additional datasets are ATTACHed under schema names (e.g. `<dataset>.rows`). Statement runs under PRAGMA query_only=1 with a 10-second budget and 500-row cap. Use this for HAVING / window functions / CTEs / multi-way joins that the structured tools don't cover.

NameTypeReqDescription
datasetsarrayyesIndexed datasets to attach. Order matters: datasets[0] is the main connection.
limitintegerRow cap (default 500, hard max 500)
redactbooleanScrub PII / credentials from result cells before return (default true).
redact_patternsarrayAdditional Python regex patterns to layer on top of the built-in set.
redact_skip_columnsarrayResult column names to exempt from redaction.
sqlstringyesSELECT or WITH … SELECT statement

No output schema declared.

No examples provided.

sample_rows ~215

Return a sample of rows. Useful for understanding data shape without prior knowledge. Method: 'head', 'tail', or 'random'. Use columns=[] on wide tables to reduce response size. Pass seed (int) with method='random' for deterministic, reproducible sampling. A sample shows shape, not distribution; use get_distribution when you need the spread.

NameTypeReqDescription
columnsarrayColumn projection (default: all)
datasetstringyesDataset identifier
methodstringSampling method (default 'head')
nintegerRows to sample (default 5, max 100)
redactbooleanScrub PII / credentials from sampled cells before return (default true).
redact_patternsarrayAdditional Python regex patterns to layer on top of the built-in set.
redact_skip_columnsarrayColumn names to exempt from redaction.
seedintegerDeterministic seed for method='random' (omitted = non-deterministic)

No output schema declared.

No examples provided.

search_data ~214

Search across column names and values. Returns column-level results with IDs — tells you where to look, not the data itself. Use before get_rows or describe_column. max_results capped at 50. Set semantic=true for embedding-based search (requires an embedding provider: JDATAMUNCH_EMBED_MODEL, GOOGLE_API_KEY, or OPENAI_API_KEY).

NameTypeReqDescription
datasetstringyesDataset identifier
max_resultsintegerMaximum results to return (default 10)
querystringyesNatural-language or keyword query
search_scopestringLimit search to schema only, values only, or all (default 'all')
semanticbooleanEnable semantic search via embeddings (default false). Requires embedding provider.
semantic_onlybooleanSkip keyword scoring entirely; use only embeddings (default false).
semantic_weightnumberWeight for semantic score in hybrid ranking. 0.0 = pure keyword, 1.0 = pure semantic (default 0.5).

No output schema declared.

No examples provided.

suggest_joins ~72

Discover FK candidates between this dataset and other indexed datasets (B5). For each non-PK column in the source, scans up to 20 other datasets' PK candidates and proposes joins where containment ≥ 95%. Sample-based (500 distinct values per source column).

NameTypeReqDescription
datasetstringyesSource dataset identifier

No output schema declared.

No examples provided.

suggest_keys ~75

Rank primary-key candidates for a dataset (B5). Each entry carries a confidence score plus the reasons that raised it (integer column, UUID format, no nulls, exact-count unique). Candidates are ranked from profile statistics, so confirm against the source system before treating one as the key.

NameTypeReqDescription
datasetstringyesDataset identifier

No output schema declared.

No examples provided.

summarize_dataset ~73

Generate natural-language summaries for a dataset and all its columns. Works on already-indexed datasets — reads profiles from index.json, generates summaries, and writes them back. No re-parsing of source files. Summaries are also auto-generated during index_local.

NameTypeReqDescription
datasetstringyesDataset identifier (from list_datasets)

No output schema declared.

No examples provided.

tune_weights ~240

Inspect, set, or reset the weight vector search_data uses to rank columns (name/value/type match weights plus the BM25 and semantic blend scales). Omit all args to inspect the effective weights and their source. Pass set_weights (a {weight: number} object) to override, or reset=true to clear. Scope with dataset (per-dataset overrides win over the global default, which wins over built-ins). Honored by search_data at query time. Unlike jcodemunch/jdocmunch, weights are tuned explicitly here (no ranking ledger). Tunable: name_exact, name_substr, name_word, ai_summary_word, value_exact, value_substr, type_boost, bm25_scale, semantic_scale, default_semantic_weight. Affects search_data ranking only; no other tool reads these weights.

NameTypeReqDescription
datasetstringTune one dataset. Omit for the global default.
resetbooleanClear this scope overrides.
set_weightsobjectWeight overrides, e.g. name_exact=30. Unknown names or non-numeric values are rejected; values are clamped to each weight bounds.

No output schema declared.

No examples provided.

validate_index ~93

Verify an indexed dataset's on-disk integrity. Runs SQLite PRAGMA integrity_check, cross-checks row count and column list against index.json, and verifies index.json content hash. Reports stale-lock state from interrupted index_local runs. Returns overall_status: 'ok' | 'warning' | 'error'. Checks the integrity of the index, never the correctness of the underlying data.

NameTypeReqDescription
datasetstringyesDataset identifier

No output schema declared.

No examples provided.

Common questions

What is the jDataMunch MCP server?

jDataMunch MCP is listed in the public MCP registry as io.github.jgravelle/jdatamunch-mcp. Tabular data retrieval. Index CSV/Excel, query rows, aggregate. 99%+ savings vs raw file reads. This page covers its PyPI package (jdatamunch-mcp).

Is the jDataMunch MCP server safe to use?

jDataMunch MCP scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the jDataMunch MCP server expose?

jDataMunch MCP exposes 39 tools: index_local, index_repo, list_datasets, list_repos, describe_dataset, and 34 more. Their descriptions and schemas cost roughly 6,053 tokens of context every time the server is loaded.

Is the jDataMunch MCP server still maintained?

jDataMunch MCP is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.