Install any skill in seconds. Free to start, no credit card required.
Get Started Free →shinpr/mcp-local-rag
Searches, saves, and maintains a local document index through a local RAG MCP server.
Passed 10 of 17 test cases with the skill, and 6 of 17 without it.
and 4 more in the full report
7 fixed6 passed either way7 still failing2 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 7 test cases the skill fixed. Same model, same prompt, with and without the skill.
I need to look up the exact error code 'ERR_AUTH_EXPIRED' in our indexed developer documentation to find the specific function that handles token renewal. What limit setting should be passed to search for this specific answer?
| Checked | Without skill | With skill |
|---|---|---|
| Specifies a search result limit of 5. | Missed | Passed |
The instructions your model reads when the skill loads.
| MCP Tool | CLI Equivalent | Use When |
|---|---|---|
ingest_file | npx mcp-local-rag ingest <path> [--visual] | Local files (PDF, DOCX, TXT, MD). CLI for bulk/directory. PDF visual mode: see Visual content (PDFs). |
ingest_data | — | Raw content (HTML, text) with source URL |
query_documents | npx mcp-local-rag query <text> | Semantic + keyword hybrid search; optional scope to limit to a path prefix |
delete_file | npx mcp-local-rag delete <path> | Remove ingested content |
list_files | npx mcp-local-rag list [--scope <prefix>] | File ingestion status; optional scope to limit to a path prefix (reachable scan path) |
status | npx mcp-local-rag status | Database stats |
read_chunk_neighbors | npx mcp-local-rag read-neighbors | Read N chunks adjacent to a known chunkIndex (context expansion; call after query_documents or grep) |
sync_start | npx mcp-local-rag sync [path] | Reconcile the index with disk after files changed outside this session. See Index sync |
sync_status | — | Poll a sync_start job for progress and its final outcome |
read_chunk_neighbors only when it alone cannot ground the answer.ingest_file for local files, ingest_data for raw or web content.sync_start once, then poll sync_status, instead of re-running ingest_file file by file.Hybrid search combines vector (semantic) and keyword (BM25) by default.
Lower = better match, but the array order is the ranking: with an external reranker configured the first result can carry a worse score than one below it. The bands hold for the default embedding model and keyword weight; under a different configuration, judge each hit against the others in the same response.
| Score | Action |
|---|---|
| < 0.3 | Use directly |
| 0.3-0.5 | Include if it mentions the same concept/entity |
| 0.5-0.7 | Include only if directly relevant to the question |
| > 0.7 | Skip unless no better results |
Score ranks lexical and semantic proximity, not usefulness: drop a hit that shares keywords with the query but not its intent, whatever it scored.
When two hits contradict each other, settle it on source, stated version, and surrounding context — not on score, which says nothing about which one is current or correct — and report the discrepancy when that does not settle it. When a query returns nothing, check list_files before answering that the corpus has no such content — an empty result also means never ingested.
test cases passed, vs 6 / 17 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.