rg_search_notesLABSCO SUMMARY
Vault search that knows a property from a heading.
Plain grep over markdown returns lines with no idea what they belong to; here a match comes back attached to the tag, the property or the section it lives under, which is usually the difference between an answer and a list. On a large vault the context detection is also the expensive part, and it can be turned off per search, alongside a folder filter and a smaller result limit. The orphan and backlink views turn the same index into maintenance tools for a graph that has grown untidy.
What it is
Content search across an Obsidian vault, run with ripgrep and read with the vault's structure in mind. A hit reports which frontmatter property or which heading contains it rather than a bare line number, and the link-aware tools turn the same index into graph maintenance.
What you get
- Text search scoped three ways — everything, note content only, or YAML frontmatter only — with case sensitivity, a folder filter and a result limit between 1 and 100, defaulting to 15 (rg_search_notes).
- Context on every match: the frontmatter property name for a frontmatter hit, or the nearest heading for a content hit, including nested YAML structures — switchable off when speed matters more (rg_search_notes).
- Links found and filtered by kind: wiki links in both [[Note]] and [[Note|Display]] forms, markdown links, external URLs, and links inside frontmatter properties and lists, narrowed by a regex on the URL or on the title (rg_search_links).
- Every note linking to a given target, with the context around each reference, so a topic's incoming edges are readable (rg_search_backlinks).
- Notes filtered by modification date between a start and an end in YYYY-MM-DD form, for reviewing recent work or a particular period (rg_search_recent_notes).
- Notes with no links in or out — the ones that fell out of the graph (rg_search_orphaned_notes).
Requirements
Python 3.8 or higher, ripgrep installed and on your PATH, and an Obsidian vault. The vault location is the one thing to set: OBSIDIAN_VAULT_PATH as an environment variable, or a vault_path entry in ~/.rgrep-mcp.json, which also holds defaults for case sensitivity and result limit. Use an absolute path. Install from a clone with pip install -e . and run it as python -m rgrep_mcp.server. No account, no key, and nothing leaves the machine.
Setup effort
Build from source — git clone https://github.com/kpetrovsky/kp-ripgrep-mcp.git
USE CASES
Finding where you wrote about something months ago
The match comes back with the heading it lives under, so you know which note and which section.
Finding notes by a property rather than by their text
Search frontmatter only, so a status or project value matches without the body noise.
Seeing what already references a topic
Backlinks with their surrounding context, rather than a bare list of filenames.
Cleaning up a vault that has drifted
Find the notes with no links either way and decide whether to connect or retire them.
Reviewing what you worked on last week
Filter by modification date range, then search inside that set.
Auditing external links before publishing
Filter links to external URLs only, narrowed by a pattern.
5 tools
Listed in project docs. Your client may show a different list.
rg_search_linksrg_search_backlinksrg_search_recent_notesrg_search_orphaned_notesBEFORE YOU INSTALL
What to know first
Tools you get
5 tools named in the project's documentation.
Requires
- python on PATH
- Python 3.8 or later
- ripgrep (rg) installed and on PATH
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
git clone https://github.com/kpetrovsky/kp-ripgrep-mcp.git
cd kp-ripgrep-mcp
pip install -e .MCP Clients
Claude Desktop
{
"mcpServers": {
"obsidian-search": {
"command": "python",
"args": [
"-m",
"rgrep_mcp.server"
],
"env": {
"OBSIDIAN_VAULT_PATH": "<YOUR_OBSIDIAN_VAULT_PATH>"
}
}
}
}