jDocmunch MCP
PYPI · JDOCMUNCH-MCP
Section-level doc search for .md, .rst, .adoc, .org, .ipynb, .html, .yaml, .json, and OpenAPI specs.
Available components
Last scanned (4 hours ago)
Scores higher than 63% of PyPI servers
Category Code Search and Documentation
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 Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 0 of 31 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency35
- 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: the license (LicenseRef-jDocMunch-Dual-Use) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability78
- 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 12219 tokens (~187/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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage92
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 76% 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
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.
- 5 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 1.150.1 → 1.151.0 functional
- 1 Nov 26 +1
- Stability: 0.97 → pass security
- 31 Oct 26 −1
- Provenance: unverified → fail ▼ security
- Stability: pass → 0.97 functional
- 30 Oct 26 +15
- Provenance: fail → unverified ▼ security
- Malware scan: unverified → pass ▲ security
- 29 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 26 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 24 Oct 26 0
- Package version: 1.150.0 → 1.150.1 functional
- 20 Oct 26 0
- Package version: 1.149.0 → 1.150.0 functional
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 5 Nov 2026 · Analysed pypi/jdocmunch-mcp@1.151.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
| Reason | No attestation published |
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 31 packages
| Packages resolved | 31 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
index_local ~1,483
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). For a folder of tens of thousands of files, which can outlast a client's tool timeout, run `jdocmunch-mcp index-local --path <dir>` from a shell instead; this server reads the index it writes. 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`. v1.147+ — a response that indexes the folder or finds nothing to change returns `duplicate_anchors` (empty when none; at most 20 entries, each with `section_ids` and `titles` capped at 20 and `section_ids_truncated`), `duplicate_anchors_total` (uncapped), `duplicate_anchors_truncated` and `duplicate_anch…
| Name | Type | Req | Description |
|---|---|---|---|
| autotune | boolean | – | v1.29+ — when true, runs tune_weights against accumulated ranking events at the end of indexing. No-op when telemetry isn't enabled. |
| extra_ignore_patterns | array | – | Additional gitignore-style patterns to exclude from indexing |
| follow_symlinks | boolean | – | Whether to follow symlinks. Default false for security. |
| include_dot_dirs | array | – | jdoc#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… |
| incremental | boolean | – | When true (default), only re-index files that changed since the last index. Set to false to force a full re-index. |
| legacy_reconcile | string | – | Part 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_files | integer | – | Maximum 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… |
| name | string | – | Optional 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'. |
| ocr | boolean | – | [ocr] extra (v1.149.0): read scanned PDF pages with an OCR engine already on the machine (Tesseract, or Windows' built-in OCR). Runs ONLY if the user also set JDOCMUNCH_OCR=1 in config; the response'… |
| ocr_budget_seconds | number | – | Time budget for OCR in this call (default 60). A document that can't finish is skipped as ocr_budget_exhausted and resumes on the next call; for big scanned folders use the CLI `index-local --ocr`, w… |
| ocr_max_pages | integer | – | Per-document OCR page cap (default 50); pages past it are reported, not read. |
| path | string | yes | Path to local folder (absolute or relative, supports ~ for home directory) |
| paths | array | – | Optional 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_by | string | – | Order 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_summaries | boolean | – | Use AI to generate section summaries (requires ANTHROPIC_API_KEY or GOOGLE_API_KEY). When false, uses heading text. |
| use_embeddings | – | – | Generate 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_mode | string | – | Linked-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.
| Name | Type | Req | Description |
|---|---|---|---|
| code_repo | string | yes | jcodemunch repo identifier |
| max_examples | integer | – | – |
| max_symbols_per_block | integer | – | – |
| repo | string | yes | jdocmunch repo identifier |
No output schema declared.
No examples provided.
list_docs ~266
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. Each doc also carries `mtime` when one is known — as of the last indexing pass, omitted when unknown rather than null — and `_meta.docs_with_mtime` says how many have one, so a partially filled or pre-1.144 index is distinguishable from a complete one.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | v1.147+ — return at most this many docs, starting at offset. Default: all, subject to the response ceiling (JDOCMUNCH_RESPONSE_MAX_BYTES, 1 MiB), over which the call is refused, never truncated. docs… |
| offset | integer | – | v1.147+ — docs to skip. Pass the previous response's next_offset. Default 0. |
| path_glob | string | – | v1.147+ — fnmatch glob restricting the list to matching doc_paths. Default: no filter. |
| repo | string | yes | Repository 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.
| Name | Type | Req | Description |
|---|---|---|---|
| repo | string | yes | – |
| tag | string | yes | – |
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).
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | – |
| prefix | string | – | – |
| repo | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| repo | string | yes | – |
| term | string | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| repo | string | yes | jdocmunch docs repo identifier |
No output schema declared.
No examples provided.
search_sections ~1,076
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. Results with text_source="ocr" came from a scanned page via OCR and may contain errors.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | v1.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-… |
| dedupe | boolean | – | v1.34+ — collapse near-duplicate sections to a single representative based on the v1.34 cluster sidecar. _meta.deduped reports suppressed member ids. |
| doc_path | string | – | Optional: limit search to a specific document |
| exclude_roles | array | – | v1.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_tags | array | – | v1.51+ — drop sections whose Section.tags contains ANY listed tag (negative ANY-match). Stacks with `tags`. Case-insensitive. |
| fields | array | – | v1.121+ — explicit per-row field whitelist (e.g. ['id','title','doc_path','_score']). Wins over compact. `id` is always returned. |
| max_byte_length | integer | – | v1.53+ — drop sections longer than this many bytes. Use to filter out oversized dumps. Stacks with min_byte_length. |
| max_level | integer | – | v1.44+ — restrict to sections at heading level <= this. Inclusive. Stacks with min_level. |
| max_results | integer | – | Maximum number of results to return |
| min_answerability | number | – | v1.42+ — drop results whose v1.33 _answerability score is below this threshold (0–1). _meta.quality_filtered reports drop count. |
| min_byte_length | integer | – | v1.53+ — drop sections shorter than this many bytes (byte_end - byte_start). Use to filter out stubs / one-liners. |
| min_level | integer | – | v1.44+ — restrict to sections at heading level >= this. Inclusive. |
| min_quotability | number | – | v1.42+ — drop results whose v1.33 _quotability score is below this threshold (0–1). Stacks with min_answerability. |
| path_glob | string | – | v1.36+ — fnmatch glob restricting results to matching doc_paths (e.g. 'api/**/*.md'). Stacks with doc_path. |
| profile | string | – | v1.32+ — task-aware retrieval profile. install/debug/explain/api each boost a small role set so matching sections rank ahead. Explicit role= overrides. |
| query | string | yes | Search query |
| repo | string | – | Repository identifier |
| repo_group | string | – | v1.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. |
| role | string | – | Optional v1.19+ role filter. Values: concept, tutorial, how_to, reference, api, example, troubleshooting, changelog, faq, other. |
| roles | array | – | v1.52+ — restrict to sections whose metadata.role matches ANY listed role (positive OR-match). Differs from singular `role` (which is exact). Case-insensitive. |
| semantic | boolean | – | null/omit (auto — hybrid when embeddings exist), true (force hybrid), false (force lexical-only). Zero performance cost when the index has no embeddings. |
| semantic_only | boolean | – | Skip lexical scoring; rank purely by embedding cosine similarity. |
| semantic_weight | number | – | Weight (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_bytes | integer | – | v1.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… |
| tags | array | – | v1.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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | – |
| query | string | yes | Heading text to match against |
| repo | string | yes | Repository identifier |
No output schema declared.
No examples provided.
section_neighbors ~165
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.
| Name | Type | Req | Description |
|---|---|---|---|
| repo | string | yes | Repository identifier (owner/repo or just repo name) |
| section_id | string | yes | Target section ID from get_toc, search_sections, etc. v1.147+ — also accepts a `doc.md#anchor` reference to a heading written with an explicit `{#id}`; an ambiguous one sets `anchor_ambiguous`, `anch… |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | – |
| max_age_days | integer | – | Only learn from ledger events newer than this many days. Keeps stale events from anchoring weights to an outdated query distribution. 0 = lifetime ledger. |
| min_events | integer | – | – |
| repo | string | – | Optional — single repo to tune. Omit to scan all repos with events. Required with set_weight. |
| set_weight | number | – | Persist 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.
| Name | Type | Req | Description |
|---|---|---|---|
| repo | string | yes | – |
| sample | integer | – | Only verify the first N sections. |
| source | string | – | Which 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.
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
claude mcp add jgravelle-jdocmunch-mcp -- uvx jdocmunch-mcp
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, .org, .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 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 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 11,942 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the jDocmunch MCP server under?
jDocmunch MCP declares the LicenseRef-jDocMunch-Dual-Use licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.