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
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
- 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 0 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
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
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
{
"mcpServers": {
"jgravelle-jdocmunch-mcp": {
"command": "uvx",
"args": [
"jdocmunch-mcp"
]
}
}
} {
"servers": {
"jgravelle-jdocmunch-mcp": {
"command": "uvx",
"args": [
"jdocmunch-mcp"
]
}
}
} codex mcp add jgravelle-jdocmunch-mcp -- uvx jdocmunch-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jgravelle-jdocmunch-mcp": {
"type": "local",
"command": [
"uvx",
"jdocmunch-mcp"
],
"enabled": true
}
}
} openclaw mcp add jgravelle-jdocmunch-mcp --command uvx --arg jdocmunch-mcp
mcp_servers:
jgravelle-jdocmunch-mcp:
command: "uvx"
args: ["jdocmunch-mcp"] {
"McpServers": {
"jgravelle-jdocmunch-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"jdocmunch-mcp"
]
}
}
} assistant mcp add jgravelle-jdocmunch-mcp -t stdio -c uvx -a jdocmunch-mcp
{
"mcpServers": {
"jgravelle-jdocmunch-mcp": {
"command": "uvx",
"args": [
"jdocmunch-mcp"
]
}
}
} 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
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 →
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,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`.
| 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'. |
| 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 ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| 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,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.
| 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 ~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.
| 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. |
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.
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.