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.

jDocmunch MCP

PYPI · JDOCMUNCH-MCP · SCANNED SEP 20

Section-level doc search for .md, .rst, .adoc, .ipynb, .html, .yaml, .json, and OpenAPI specs.

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 32 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
Schema Quality & AI Usability81
  • 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 10047 tokens (~154/item across 65 items; 64 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 Coverage91
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 74% 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_index" 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 66 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 jDocmunch MCP server?

jDocmunch MCP runs locally as a PyPI package, launched with uvx jdocmunch-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 · jdocmunch-mcp

# add to Claude Code
claude mcp add jgravelle-jdocmunch-mcp -- uvx jdocmunch-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "jgravelle-jdocmunch-mcp": {
      "command": "uvx",
      "args": [
        "jdocmunch-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "jgravelle-jdocmunch-mcp": {
      "command": "uvx",
      "args": [
        "jdocmunch-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add jgravelle-jdocmunch-mcp -- uvx jdocmunch-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jgravelle-jdocmunch-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "jdocmunch-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add jgravelle-jdocmunch-mcp --command uvx --arg jdocmunch-mcp
# ~/.hermes/config.yaml
mcp_servers:
  jgravelle-jdocmunch-mcp:
    command: "uvx"
    args: ["jdocmunch-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "jgravelle-jdocmunch-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "jdocmunch-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add jgravelle-jdocmunch-mcp -t stdio -c uvx -a jdocmunch-mcp
// mcp.json
{
  "mcpServers": {
    "jgravelle-jdocmunch-mcp": {
      "command": "uvx",
      "args": [
        "jdocmunch-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 −1
    • Stability: pass → 0.90 functional
  • 19 Sept 26 +15
    • Stability: 0.97 → unverified security
    • Tool safety: pass → unverified security
    • Malware scan: unverified → pass security
    • Stability: 0.97 → pass security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 100 → unverified functional
    • Package version: 1.141.0 → 1.143.0 functional
    • Package version: 1.141.0 → 1.142.0 functional
  • 18 Sept 26 −15
    • Malware scan: pass → unverified security
    • Package version: 1.139.1 → 1.141.0 functional
    • Package version: 1.139.1 → 1.140.0 functional
  • 17 Sept 26 +1

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

  • 16 Sept 26 −2
    • Stability: pass → 0.90 functional
  • 15 Sept 26 +16
    • Malware scan: unverified → pass security
    • Stability: 0.97 → pass security
  • 14 Sept 26 −15
    • Malware scan: pass → unverified security
  • 13 Sept 26 −1
    • Stability: pass → 0.93 functional
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/jdocmunch-mcp@1.143.0

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 32 packages
Packages resolved 32
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 64 exposed · ~9,770 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
index_local ~1,112

Index a local folder containing documentation files (.md, .txt, .rst; plus .pdf/.docx/.pptx/.epub when the optional [office] extra is installed — converted to Markdown locally). Parses by heading hierarchy into sections for efficient retrieval. An already-indexed source is recognized before storage is chosen: the established handle is reused (or refreshed), an explicit conflicting name returns a conflict instead of creating a duplicate index, and multiple equivalent legacy indexes return bounded ambiguity. Embeddings auto-enable when a provider is configured (GOOGLE_API_KEY, OPENAI_API_KEY, openai-compatible + JDOCMUNCH_OPENAI_COMPAT_URL + JDOCMUNCH_OPENAI_COMPAT_MODEL, or sentence-transformers). Coverage: `coverage_complete` answers 'did I get everything', with `skip_counts` / `skipped_paths` naming what was dropped and why; `truncated` answers ONLY the max_files cap and is false when a file was dropped for any other reason. Files over the per-file size cap (5MB default, JDOCMUNCH_MAX_FILE_SIZE) are reported under skip_counts.oversize. Response includes a `changes` list with one {doc_path, status: new|changed|deleted, mtime} entry per file, sorted newest first and capped at 50 entries, useful for a 'recently edited' map at session start. `changes_total` is the uncapped count and `changes_truncated` is true when entries were dropped. Deleted files sort last, so the cap drops them first: the `new`/`changed`/`deleted` count fields are the authority, not the length of `changes`.

NameTypeReqDescription
autotunebooleanv1.29+ — when true, runs tune_weights against accumulated ranking events at the end of indexing. No-op when telemetry isn't enabled.
extra_ignore_patternsarrayAdditional gitignore-style patterns to exclude from indexing
follow_symlinksbooleanWhether to follow symlinks. Default false for security.
include_dot_dirsarrayjdoc#113 - directory NAMES to index even though they start with a dot, e.g. [".claude"]. Dotted directories are skipped by default so a tool's dotfile cache cannot be ingested as documentation; .gith…
incrementalbooleanWhen true (default), only re-index files that changed since the last index. Set to false to force a full re-index.
legacy_reconcilestringPart C.2 legacy reconciliation (jdoc#87). Requires an explicit name= selecting a pre-1.102 fieldless legacy index and a full refresh. 'report' proves whether it is an exact duplicate of its single mo…
max_filesintegerMaximum number of doc files to index. Default 10000. When the cap is hit, the response includes `truncated: true`, `discovered: <total found>`, and `indexed: <max_files>` so the caller can detect dat…
namestringOptional repo identifier override. Use this when two folders share the same name (e.g. both named 'docs'). If omitted, the folder name is used. Example: 'requests-docs', 'flask-docs'.
pathstringyesPath to local folder (absolute or relative, supports ~ for home directory)
pathsarrayOptional list of explicit paths to index. When provided, the directory walk is skipped; only these files (and the contents of any directories in the list) are indexed. Entries may be absolute or rela…
sort_bystringOrder in which files are truncated when discovered > max_files. 'newest' (default) keeps the most recently-edited files so a fresh edit is always in the index. 'walk_order' preserves filesystem-walk…
use_ai_summariesbooleanUse AI to generate section summaries (requires ANTHROPIC_API_KEY or GOOGLE_API_KEY). When false, uses heading text.
use_embeddingsGenerate semantic embeddings for each section, enabling hybrid (BM25+semantic) search. true/false/"auto". "auto" (default) enables embeddings when an embedding provider is configured (GOOGLE_API_KEY,…
worktree_modestringLinked-worktree behavior (jdoc#83). 'reuse_equivalent' (default) reuses a proven-fresh established index from another linked worktree instead of creating a duplicate; uncertain outcomes return a boun…

No output schema declared.

No examples provided.

jdocmunch_guide ~97

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

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

link_code_to_symbols ~119

Best-effort bridge from doc code blocks to jcodemunch code symbols. For each block, tokenizes identifiers and looks them up via jcodemunch's search_symbols. Returns {by_block, by_symbol, _meta} where _meta.bridge_available reports whether jcodemunch-mcp is importable.

NameTypeReqDescription
code_repostringyesjcodemunch repo identifier
max_examplesinteger
max_symbols_per_blockinteger
repostringyesjdocmunch repo identifier

No output schema declared.

No examples provided.

list_docs ~80

v1.55+ — flat per-doc inventory of an indexed repo: doc_path, section_count, format, byte_size for each indexed document. Lighter than get_toc_tree (which returns full section trees per doc). Sorted by doc_path. Inventory only; it returns no section titles and no content.

NameTypeReqDescription
repostringyesRepository identifier

No output schema declared.

No examples provided.

list_endpoints_by_tag ~49

Return every operation whose tags list contains the given tag (exact). Convenience wrapper around find_endpoint with only a tag filter.

NameTypeReqDescription
repostringyes
tagstringyes

No output schema declared.

No examples provided.

list_repo_groups ~64

List defined repo groups (v1.26+). Each group is a named alias for a set of indexed repos that search_sections can fan out across via the repo_group kwarg. Lists the group definitions only; it does not check that every member repo is still indexed.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_terms ~52

List glossary terms in alphabetical order, optionally filtered by prefix. Capped at max_results (default 100).

NameTypeReqDescription
max_resultsinteger
prefixstring
repostringyes

No output schema declared.

No examples provided.

lookup_term ~65

Glossary lookup. Returns every entry whose term equals the query (case-insensitive, exact). Glossary entries are extracted at index time from **Term** — definition Markdown patterns and RST .. glossary:: blocks.

NameTypeReqDescription
repostringyes
termstringyes

No output schema declared.

No examples provided.

resolve_related_code_repos ~148

Map a jdocmunch docs repo to candidate jCodeMunch code repo handles by source_root. The two suites use independent repo-identity models, so a docs handle (e.g. 'local/foo-docs') is NOT a valid jCodeMunch code_repo. Given a docs repo, returns candidates[{repo, confidence, reason, source_root}] (exact source_root match = high; containment = medium/low), an 'ambiguous' flag, and _meta.bridge_available. Use it to pick the right code_repo for the link_code_to_symbols / get_undocumented_symbols bridge tools.

NameTypeReqDescription
repostringyesjdocmunch docs repo identifier

No output schema declared.

No examples provided.

search_sections ~1,057

Search sections by relevance. Hybrid (BM25 lexical + semantic embedding) fusion when the index was built with use_embeddings=true; falls back to lexical-only otherwise. Returns summaries only — use get_section for full content.

NameTypeReqDescription
compactbooleanv1.121+ — drop per-row fields a caller can't act on (repo, parent_id, children, byte_start/byte_end, content_hash, inline_code, references; plus empty tags and a summary identical to the title). Per-…
dedupebooleanv1.34+ — collapse near-duplicate sections to a single representative based on the v1.34 cluster sidecar. _meta.deduped reports suppressed member ids.
doc_pathstringOptional: limit search to a specific document
exclude_rolesarrayv1.52+ — drop sections whose metadata.role matches ANY listed role. Case-insensitive. Stacks with `roles` (the result must match an included role and not match any excluded role).
exclude_tagsarrayv1.51+ — drop sections whose Section.tags contains ANY listed tag (negative ANY-match). Stacks with `tags`. Case-insensitive.
fieldsarrayv1.121+ — explicit per-row field whitelist (e.g. ['id','title','doc_path','_score']). Wins over compact. `id` is always returned.
max_byte_lengthintegerv1.53+ — drop sections longer than this many bytes. Use to filter out oversized dumps. Stacks with min_byte_length.
max_levelintegerv1.44+ — restrict to sections at heading level <= this. Inclusive. Stacks with min_level.
max_resultsintegerMaximum number of results to return
min_answerabilitynumberv1.42+ — drop results whose v1.33 _answerability score is below this threshold (0–1). _meta.quality_filtered reports drop count.
min_byte_lengthintegerv1.53+ — drop sections shorter than this many bytes (byte_end - byte_start). Use to filter out stubs / one-liners.
min_levelintegerv1.44+ — restrict to sections at heading level >= this. Inclusive.
min_quotabilitynumberv1.42+ — drop results whose v1.33 _quotability score is below this threshold (0–1). Stacks with min_answerability.
path_globstringv1.36+ — fnmatch glob restricting results to matching doc_paths (e.g. 'api/**/*.md'). Stacks with doc_path.
profilestringv1.32+ — task-aware retrieval profile. install/debug/explain/api each boost a small role set so matching sections rank ahead. Explicit role= overrides.
querystringyesSearch query
repostringRepository identifier
repo_groupstringv1.26+ — fan out across the named repo group (defined via define_repo_group). When set, the per-repo `repo` arg is ignored; results from each member repo are fused via RRF.
rolestringOptional v1.19+ role filter. Values: concept, tutorial, how_to, reference, api, example, troubleshooting, changelog, faq, other.
rolesarrayv1.52+ — restrict to sections whose metadata.role matches ANY listed role (positive OR-match). Differs from singular `role` (which is exact). Case-insensitive.
semanticbooleannull/omit (auto — hybrid when embeddings exist), true (force hybrid), false (force lexical-only). Zero performance cost when the index has no embeddings.
semantic_onlybooleanSkip lexical scoring; rank purely by embedding cosine similarity.
semantic_weightnumberWeight (0.0–1.0) of semantic component in hybrid fusion. Lexical gets 1 - weight. Omit to use this repo's tuned weight, else 0.5; a value you pass is always honoured. _meta.semantic_weight and _meta.…
snippet_bytesintegerv1.121+ — inline the first N bytes of each section's body as `snippet` so a confident top hit needs no get_section round-trip. UTF-8 safe (never splits a codepoint); `snippet_truncated: true` marks a…
tagsarrayv1.45+ — restrict to sections whose Section.tags contains every listed tag (AND semantics). Case-insensitive.

No output schema declared.

No examples provided.

search_titles ~97

v1.57+ — fast title-only token-overlap match. Different from search_sections (full hybrid retrieval). Use for navigation: 'find the section whose heading text matches X'. Handle-only output ({id, title, level, doc_path, _score}); no content reads, no embeddings.

NameTypeReqDescription
max_resultsinteger
querystringyesHeading text to match against
repostringyesRepository identifier

No output schema declared.

No examples provided.

section_neighbors ~98

v1.37+ — return prev/next siblings (in document order), parent, and first child for a section. Handles only (id, title, level, doc_path) — no content. Use for fast sequential navigation without re-querying search_sections.

NameTypeReqDescription
repostringyesRepository identifier (owner/repo or just repo name)
section_idstringyesTarget section ID from get_toc, search_sections, etc.

No output schema declared.

No examples provided.

tune_weights ~264

Online weight tuning. Reads ranking_events from ~/.doc-index/telemetry.db (requires JDOCMUNCH_PERF_TELEMETRY=1) and proposes a per-repo semantic_weight step. dry_run=true skips the disk write. min_events gates against early overfitting. Learns from a recency window of the ledger (default 90 days) so stale events can't anchor the weights. Learning compares confidence WITH vs WITHOUT the semantic channel, so a workload that only ever runs one mode produces no signal at all — use set_weight there instead of waiting.

NameTypeReqDescription
dry_runboolean
max_age_daysintegerOnly learn from ledger events newer than this many days. Keeps stale events from anchoring weights to an outdated query distribution. 0 = lifetime ledger.
min_eventsinteger
repostringOptional — single repo to tune. Omit to scan all repos with events. Required with set_weight.
set_weightnumberPersist this semantic_weight for repo directly, skipping the ledger. For when you have measured the right value for a corpus rather than waiting for the tuner to walk there. Does not require telemetr…

No output schema declared.

No examples provided.

verify_index ~206

Byte-offset integrity check. Walks every section, byte-range-reads the bytes, recomputes SHA-256, and compares to the stored content_hash. source='cache' (default) checks the INDEX MIRROR: a clean result proves the index is internally consistent, NOT that the source document is still current. source='live' checks the real workspace files under the index source_root, so an edited source drifts and a deleted one goes missing. _meta.verify_layer always names which one ran. Reports drift / missing / error counts plus the drifting section ids. Sample N sections via the sample arg for cheap CI checks.

NameTypeReqDescription
repostringyes
sampleintegerOnly verify the first N sections.
sourcestringWhich bytes to verify. 'cache' (default) = the indexed raw mirror; clean means the index is self-consistent and says nothing about whether the source changed. 'live' = the workspace files under sourc…

No output schema declared.

No examples provided.

Common questions

What is the jDocmunch MCP server?

jDocmunch MCP is listed in the public MCP registry as io.github.jgravelle/jdocmunch-mcp. Section-level doc search for .md, .rst, .adoc, .ipynb, .html, .yaml, .json, and OpenAPI specs. This page covers its PyPI package (jdocmunch-mcp).

Is the jDocmunch MCP server safe to use?

jDocmunch 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 jDocmunch MCP server expose?

jDocmunch MCP exposes 64 tools: index_local, doc_index_repo, doc_list_repos, get_index_overview, get_doc, and 59 more. Their descriptions and schemas cost roughly 9,770 tokens of context every time the server is loaded.

Is the jDocmunch MCP server still maintained?

jDocmunch 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.