search_filesLABSCO SUMMARY
Two search servers, and the difference matters.
The file-search server finds files by name; the fuzzy-search server looks inside them. Pointing an assistant at the wrong one produces confident empty results. The SQLite server ships read-only by default, which is the right way round — turn writes on per registration rather than globally, and keep a separate read-only entry for exploration.
What it is
A set of four independent MCP servers you register separately: a file-name searcher built on fd and fzf, a content searcher built on ripgrep and fzf, a SQLite client that is read-only unless you say otherwise, and a Python port of the sequential-thinking server.
What you get
- File names, fast —
search_filestakes a regex or glob and alimit,filter_filesapplies a fuzzy filter to the result - Text inside files —
fuzzy_search_filesmatches paths,fuzzy_search_contentmatches path and content together, with no regex to get wrong - Documents —
fuzzy_search_documentsreaches into PDFs, Office files and archives, andextract_pdf_pagespulls specific pages back out - PDF structure —
get_pdf_page_labels,get_pdf_page_countandget_pdf_outlineanswer 'what is in this file' before you read it - SQLite —
query,execute,list_tables,describe_tableandcreate_table, with write operations disabled unless explicitly enabled and:memory:supported for scratch work sequentialthinkingfor step-by-step reasoning with revisions (isRevision,revisesThought) and branches (branchFromThought,branchId)- Every server also runs as a standalone CLI, so you can check a query outside the assistant
Requirements
Python 3.10 or higher. Published as mcp-personal version 0.1.0; the documented path is to clone the repo and point your client at the individual scripts — mcp_fd_server.py, mcp_fuzzy_search.py, mcp_sqlite_server.py, mcp_sequential_thinking.py. The search servers need external binaries: fd and fzf for file search, ripgrep and fzf for content search; PDF and Office search additionally wants ripgrep-all, PyMuPDF and pandoc. On Debian and Ubuntu fd installs as fdfind. Register with -s user if you want the servers available across all projects rather than just the current directory. DISABLE_THOUGHT_LOGGING=true silences the thinking server's stderr output.
Setup effort
Build from source — git clone https://github.com/dashed/mcp-personal.git
USE CASES
Finding a file when you only half remember the name
Search by pattern, then fuzzy-filter the matches down instead of scrolling a long list.
Finding where a string actually lives in a repo
Search contents with plain terms — no regex to get wrong — and get path plus matching line back.
Pulling one section out of a long PDF
Read the outline to locate the section, then extract just those pages rather than the whole document.
Letting an assistant read a database without risking it
Register the SQLite server in its default read-only mode and let queries run freely.
15 tools
Listed in project docs. Your client may show a different list.
filter_filesfuzzy_search_filesfuzzy_search_contentfuzzy_search_documentsextract_pdf_pagesget_pdf_page_labelsget_pdf_page_countget_pdf_outlinequeryexecutelist_tablesdescribe_tablecreate_tablesequentialthinkingBEFORE YOU INSTALL
What to know first
Tools you get
15 tools named in the project's documentation.
Requires
- Python 3.10 or higher
- uv on PATH — each script starts itself with #!/usr/bin/env -S uv run --script
- fd and fzf for file search; ripgrep and fzf for content search
INSTALLATION
Connect your client
Server setup
git clone https://github.com/dashed/mcp-personal.git
cd mcp-personal
chmod +x *.pyMCP Clients
Claude Code
claude mcp add file-search -s user -- <YOUR_PATH_TO_MCP_PERSONAL>/mcp_fd_server.pyClaude Desktop
{
"mcpServers": {
"file-search": {
"command": "<YOUR_PATH_TO_MCP_PERSONAL>/mcp_fd_server.py"
},
"fuzzy-search": {
"command": "<YOUR_PATH_TO_MCP_PERSONAL>/mcp_fuzzy_search.py"
},
"sqlite": {
"command": "<YOUR_PATH_TO_MCP_PERSONAL>/mcp_sqlite_server.py"
},
"sequential-thinking": {
"command": "<YOUR_PATH_TO_MCP_PERSONAL>/mcp_sequential_thinking.py",
"env": {
"DISABLE_THOUGHT_LOGGING": "false"
}
}
}
}<YOUR_PATH_TO_MCP_PERSONAL> is the full path of your clone. The sqlite entry is left in its default read-only mode; the README's own block turns writes on — add "args": ["--allow-writes"] (or "env": {"MCP_SQLITE_ALLOW_WRITES": "true"}) to that entry only if you want them.
MCP Inspector
npx @modelcontextprotocol/inspector ./mcp_fd_server.py