MCP Personal
About
A collection of MCP servers for various personal productivity tools and utilities.
Details
- Author
- dashed
- Categories
- Productivity, Project Management, Automation
Jump to
Setup
Install MCP Personal in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/dashed/mcp-personal
Follow the installation instructions in the repository README, then restart your MCP client.
MCP Personal - Collection of Personal MCP Servers
A collection ofModel Context Protocol(MCP) servers for various personal productivity tools and utilities.
1. File Search Server (mcp_fd_server.py)
Fuzzy file NAME search capabilities usingfdandfzf:
- Fast file name searchusingfd(searches file names/paths, NOT contents)
- Fuzzy filtering of file nameswithfzffor intelligent name matching
- Pattern matchingwith regex and glob support for file names
- Result limitingwithlimitparameter to restrict number of matches
- Proper error handlingfor fzf exit codes (distinguishes "no matches" from errors)
- Multiline mode(advanced): can also search file contents when enabled
- Standalone CLIfor testing and direct usage
- Key point: Primary purpose is finding files by NAME, not searching contents
2. Fuzzy Search Server (mcp_fuzzy_search.py)
Advanced search with both file name and content capabilities usingripgrepandfzf:
- File name fuzzy search- find files by partial/fuzzy names
- Content searchusingripgrepto search text within files
- Fuzzy filteringof results usingfzf --filter
- Proper error handlingfor fzf exit codes (distinguishes "no matches" from errors)
- Two distinct modes:
- fuzzy_search_files: Search file NAMES/paths
- fuzzy_search_content: Search file CONTENTS with path+content matching by default
- get_pdf_page_labels: Get all page labels from a PDF file
- get_pdf_page_count: Get the total number of pages in a PDF file
- get_pdf_outline: Extract table of contents/bookmarks from a PDF file
3. SQLite Server (mcp_sqlite_server.py)
SQLite database operations with configurable read/write permissions:
- Read-only by default- Write operations disabled unless explicitly enabled
- Agent-friendly- Clear tool descriptions and examples for easy AI agent usage
- In-memory database support- Use:memory:for temporary databases
- Comprehensive operations- Query, execute, list tables, describe schema, create tables
- Safety features- Query validation, write operation restrictions, clear error messages
- Standalone CLIfor testing and direct usage
4. Sequential Thinking Server (mcp_sequential_thinking.py)
Dynamic, reflective problem-solving through a structured chain of thoughts — a Python port of the official@modelcontextprotocol/server-sequential-thinkingserver:
- Dynamic problem-solving— break complex problems into discrete, adjustable thinking steps
- Thought revision— revise earlier thoughts when understanding deepens (isRevision/revisesThought)
- Branching— explore alternative reasoning paths from any prior thought (branchFromThought/branchId)
- Adjustable totals— scaletotalThoughtsup or down mid-process, or extend past the initial estimate withneedsMoreThoughts
- Hypothesis generation & verification— generate candidate solutions and verify them against the chain of thought
- String-coercion fix— accepts string inputs for numeric (thoughtNumber,totalThoughts) and boolean (nextThoughtNeeded,isRevision,needsMoreThoughts) fields, so it works with Claude Code out of the box. Includes the fix frommodelcontextprotocol/servers#3856, which is not yet shipped in the npm release (2025.12.18)
- Optional thought logging— pretty-printed formatted thoughts go to stderr by default; setDISABLE_THOUGHT_LOGGING=trueto silence them
- Single tool:sequentialthinking
- Python 3.10 or higher
- uv(recommended) or pip
# macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Or using pip (if you already have Python) pip install uv
The PDF search and extraction tools in the Fuzzy Search Server areoptional. The server will work without these binaries installed - only the PDF-specific tools will be unavailable. This allows you to use the core fuzzy search functionality without requiring all dependencies.
The file search server requires the following command-line tools:
sudo apt install fd-find fzf # Note: On Debian/Ubuntu, fd is installed as 'fdfind'
- fd installation guide
- fzf installation guide
brew install ripgrep fzf # For PDF search capabilities (optional) brew install ripgrep-all pandoc pip install PyMuPDF # Or: uv pip install PyMuPDF
sudo apt install ripgrep fzf # For PDF search capabilities (optional) # Install ripgrep-all cargo install ripgrep-all # Requires Rust/cargo # Install PyMuPDF pip install PyMuPDF # Or: uv pip install PyMuPDF # Install pandoc sudo apt install pandoc
- ripgrep installation guide
- fzf installation guide
- ripgrep-all installation(optional, for PDF search)
- pandoc installation(optional, for PDF extraction)
git clone https://github.com/yourusername/mcp-personal.git cd mcp-personal
The easiest way to add MCP servers to Claude Code is using the CLI:
# Add custom Python servers from this repository # IMPORTANT: Use -s user for personal tools you want available across all projects # Without -s flag, servers are only available in current directory and are temporary # Easy method: Use $(pwd) when in the project directory cd /path/to/mcp-personal claude mcp add file-search -s user -- $(pwd)/mcp_fd_server.py claude mcp add fuzzy-search -s user -- $(pwd)/mcp_fuzzy_search.py claude mcp add sqlite -s user -- $(pwd)/mcp_sqlite_server.py claude mcp add sequential-thinking -s user -- $(pwd)/mcp_sequential_thinking.py # Or use relative paths (also from project directory) claude mcp add file-search -s user -- ./mcp_fd_server.py claude mcp add fuzzy-search -s user -- ./mcp_fuzzy_search.py claude mcp add sqlite -s user -- ./mcp_sqlite_server.py claude mcp add sequential-thinking -s user -- ./mcp_sequential_thinking.py # Using absolute paths (works from anywhere) claude mcp add file-search -s user -- /path/to/mcp-personal/mcp_fd_server.py claude mcp add fuzzy-search -s user -- /path/to/mcp-personal/mcp_fuzzy_search.py claude mcp add sqlite -s user -- /path/to/mcp-personal/mcp_sqlite_server.py claude mcp add sequential-thinking -s user -- /path/to/mcp-personal/mcp_sequential_thinking.py # Disable thought logging for the sequential thinking server claude mcp add sequential-thinking -s user -e DISABLE_THOUGHT_LOGGING=true -- /path/to/mcp-personal/mcp_sequential_thinking.py # Add SQLite server with write permissions enabled claude mcp add sqlite -s user -- /path/to/mcp-personal/mcp_sqlite_server.py --allow-writes # Or using environment variable claude mcp add sqlite -s user -e MCP_SQLITE_ALLOW_WRITES=true -- /path/to/mcp-personal/mcp_sqlite_server.py # Add Python servers with Python interpreter explicitly claude mcp add my-server -s user -- python /path/to/my_mcp_server.py # Add servers with arguments claude mcp add my-server -s user -- python /path/to/server.py arg1 arg2 # Add servers with environment variables claude mcp add my-server -s user -e API_KEY=your_key -e DEBUG=true -- python /path/to/server.py # Scope options: # -s local (default): Temporary, only in current directory # -s project: Shared with team via .mcp.json file # -s user: Personal, available across all your projects (recommended)
- The--separator is important before the command and its arguments
- Environment variables use-e KEY=valuesyntax
- Use-s userfor personal servers available across all projects
- Both relative and absolute paths work
For Claude Desktop, manually add servers to~/Library/Application Support/Claude/claude_desktop_config.json:
{ "mcpServers": { "file-search": { "command": "/path/to/mcp-personal/mcp_fd_server.py" }, "fuzzy-search": { "command": "/path/to/mcp-personal/mcp_fuzzy_search.py" }, "sqlite": { "command": "/path/to/mcp-personal/mcp_sqlite_server.py", "args": ["--allow-writes"], "env": { "MCP_SQLITE_ALLOW_WRITES": "true" } }, "sequential-thinking": { "command": "/path/to/mcp-personal/mcp_sequential_thinking.py", "env": { "DISABLE_THOUGHT_LOGGING": "false" } } } }
# Make all Python scripts executable chmod +x .py
# Install with development dependencies uv sync --dev # Or use make make setup
TheMCP Inspectoris an interactive developer tool for testing and debugging MCP servers. It provides a web-based interface that allows you to:
- Visually test your MCP serverswith an interactive UI
- Debug server implementationsby examining request/response flows
- Test tools, resources, and promptswith different arguments
- Validate server behaviorbefore deployment
Test any MCP server using the inspector:
# Test the file search server npx @modelcontextprotocol/inspector ./mcp_fd_server.py # Test the fuzzy search server npx @modelcontextprotocol/inspector ./mcp_fuzzy_search.py # Test the SQLite server (read-only mode) npx @modelcontextprotocol/inspector ./mcp_sqlite_server.py # Test the SQLite server with write permissions npx @modelcontextprotocol/inspector ./mcp_sqlite_server.py -- --allow-writes # Test the sequential thinking server npx @modelcontextprotocol/inspector ./mcp_sequential_thinking.py # Test the sequential thinking server with thought logging disabled npx @modelcontextprotocol/inspector -e "DISABLE_THOUGHT_LOGGING=true" ./mcp_sequential_thinking.py
- Start the MCP Inspector proxy server (default port 6277)
- Launch a web interface (default port 6274)
- Connect to your MCP server via stdio transport
- Open your browser to the inspector interface
- Navigate to the web interface(usuallyhttp://localhost:6274)
- Explore the tabs:
- Tools: Testsearch_files,filter_files,fuzzy_search_files,fuzzy_search_content,fuzzy_search_documents,extract_pdf_pages
- Resources: View any exposed resources (if implemented)
- Prompts: Test any exposed prompts (if implemented)
- Try various search patterns and filters
- Test multiline functionality
- Experiment with different file paths and flags
- Test PDF search withfuzzy_search_documents(if binaries installed)
- Test PDF page extraction withextract_pdf_pages(if binaries installed)
- Validate error handling with invalid inputs
You can also use configuration files for complex setups:
# Using a config file npx @modelcontextprotocol/inspector --config config.json # Passing environment variables npx @modelcontextprotocol/inspector -e "DEBUG=1" ./mcp_fuzzy_search.py # Custom ports npx @modelcontextprotocol/inspector --mcpp-port 3001 --mcpi-port 3002 ./mcp_fd_server.py
The MCP Inspector is particularly valuable for:
- Rapid prototyping- quickly test new functionality
- Debugging- identify issues before integration with Claude
- Documentation- understand exactly what your server exposes
- Validation- ensure proper error handling and edge cases
Once configured in Claude Desktop, you can use natural language to search for files by NAME:
- "Find all Python files in the src directory" (searches file names ending in .py)
- "Search for files with 'config' in their name" (fuzzy matches file names)
- "Find test files by name" (searches for files with 'test' in the name)
- "Use fuzzy search to find 'mainpy'" (finds main.py, main_py.txt, etc.)
The file search server also works as a standalone CLI tool:
# Search for files by name pattern ./mcp_fd_server.py search "\.py$" /path/to/search # Find Python files by name ./mcp_fd_server.py search "\.py$" . --limit 10 # Limit to first 10 results # Search with additional fd flags ./mcp_fd_server.py search "\.js$" . --flags "--hidden --no-ignore" # Fuzzy filter file names/paths ./mcp_fd_server.py filter "main" "\.py$" /path/to/search # Fuzzy search for 'main' in Python file names ./mcp_fd_server.py filter "test" "" . --limit 20 # Find up to 20 test-related files # Get the best fuzzy match by name ./mcp_fd_server.py filter "app" "" . --first # Find file with name most similar to 'app' # Multiline mode - search file CONTENTS (not just names) ./mcp_fd_server.py filter "class function" "" src --multiline # Find files containing both terms ./mcp_fd_server.py filter "TODO" "" . --multiline --limit 5 # Find first 5 files with TODOs
Once configured in Claude Desktop, you can use natural language for advanced searching:
- "Search for TODO comments that mention 'implement'"
- "Find all files with 'test' in the name using fuzzy search"
- "Look for error handling code in Python files"
- "Search for configuration files containing database settings"
- "Find method definitions named 'update_ondemand_max_spend'"
- "Search for async functions with error handling"
- "Search for 'update' in test.py files only" (works because default mode matches paths too!)
- "Search for 'async' in content only, ignore file paths" (use content_only mode)
- "Search for 'vector' in PDF documents" (requires ripgrep-all)
- "Find all references to 'machine learning' in PDFs and Word documents"
- "Extract pages 5-10 from the user manual PDF"
- "Get the table of contents from the research paper PDF"
- "Show me the outline of chapters in the user manual"
The fuzzy search server also works as a standalone CLI tool:
# Fuzzy search for file NAMES/PATHS ./mcp_fuzzy_search.py search-files "main" /path/to/search # Find files with 'main' in the name ./mcp_fuzzy_search.py search-files "test" . --hidden --limit 10 # Find test files by name ./mcp_fuzzy_search.py search-files "config" / --confirm-root # Search from root (requires explicit confirmation) # Search file CONTENTS and filter with fzf (NO regex support) # Default: Matches on BOTH file paths AND content # Works with both directories and individual files ./mcp_fuzzy_search.py search-content "TODO implement" . # Find lines containing both terms ./mcp_fuzzy_search.py search-content "test.py: update" . # Find 'update' in test.py files ./mcp_fuzzy_search.py search-content "function" specific_file.py # Search within a single file ./mcp_fuzzy_search.py search-content "error handle" src --rg-flags "-i" # Case insensitive ./mcp_fuzzy_search.py search-content "config" / --confirm-root # Search from root (requires explicit confirmation) # Content-only mode: Match ONLY on content, ignore file paths ./mcp_fuzzy_search.py search-content "TODO implement" . --content-only # Pure content search ./mcp_fuzzy_search.py search-content "async await" src --content-only # Won't match file paths # Multiline mode - changes behavior: # search-files --multiline: Searches file CONTENTS instead of names ./mcp_fuzzy_search.py search-files "class constructor" src --multiline # Find files CONTAINING these terms # search-content --multiline: Treats whole files as searchable units ./mcp_fuzzy_search.py search-content "async await" . --multiline # Find files with both terms anywhere ./mcp_fuzzy_search.py search-content "try catch" . --multiline --content-only # Content-only + multiline # PDF and document search (requires optional binaries) ./mcp_fuzzy_search.py search-documents "machine learning" . # Search PDFs and docs ./mcp_fuzzy_search.py search-documents "invoice total" invoices/ --file-types "pdf" # PDFs only ./mcp_fuzzy_search.py search-documents "contract" . --file-types "pdf,docx" --limit 5 ./mcp_fuzzy_search.py search-documents "report" / --confirm-root # Search from root (requires explicit confirmation) # Extract specific pages from PDFs (using PyMuPDF) ./mcp_fuzzy_search.py extract-pdf manual.pdf "1,3,5-7" # Extract pages 1, 3, 5, 6, 7 ./mcp_fuzzy_search.py extract-pdf report.pdf "v-vii,1,ToC" # Use page labels ./mcp_fuzzy_search.py extract-pdf report.pdf "10-20" --format html # Extract as HTML ./mcp_fuzzy_search.py extract-pdf thesis.pdf "100-105" --preserve-layout # Keep layout ./mcp_fuzzy_search.py extract-pdf book.pdf "1-50" --fuzzy-hint "neural network" # Filter by content ./mcp_fuzzy_search.py extract-pdf book.pdf "0,266-273" --zero-based # 0-based indices (pages 1, 267-274) ./mcp_fuzzy_search.py extract-pdf book.pdf "1-50" --one-based # 1-based indices (pages 1-50) # Get PDF information ./mcp_fuzzy_search.py page-labels manual.pdf # List all page labels ./mcp_fuzzy_search.py page-labels manual.pdf --start 100 --limit 20 # Get labels for pages 100-119 ./mcp_fuzzy_search.py page-count manual.pdf # Get total page count ./mcp_fuzzy_search.py pdf-outline manual.pdf # Get table of contents ./mcp_fuzzy_search.py pdf-outline manual.pdf --max-depth 2 # Limit to 2 levels ./mcp_fuzzy_search.py pdf-outline manual.pdf --fuzzy-filter "chapter" # Filter by title ./mcp_fuzzy_search.py pdf-outline manual.pdf --no-simple # Detailed output with links
Once configured in Claude Desktop, you can use natural language for database operations:
- "List all tables in the database"
- "Show me the schema for the users table"
- "Query the last 10 orders from the orders table"
- "Count active users in the database"
- "Update user status to inactive for users who haven't logged in for a year" (requires write permissions)
- "Create a new table for storing session data" (requires write permissions)
The SQLite server also works as a standalone CLI tool:
# Query database (read-only operations) ./mcp_sqlite_server.py query "SELECT FROM users" database.db ./mcp_sqlite_server.py query "SELECT COUNT(*) as total FROM orders WHERE status = 'active'" sales.db # List all tables ./mcp_sqlite_server.py list-tables database.db # Describe table schema ./mcp_sqlite_server.py describe-table users database.db # Execute write operations (requires --allow-writes flag) ./mcp_sqlite_server.py execute "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')" database.db --allow-writes ./mcp_sqlite_server.py execute "UPDATE users SET active = 0 WHERE last_login < date('now', '-1 year')" database.db --allow-writes # Use in-memory database for testing ./mcp_sqlite_server.py query "SELECT sqlite_version()" :memory:
Once configured, Claude can invokesequentialthinkingto work through problems in explicit, revisable steps. Natural-language prompts that trigger it:
- "Think step by step about how to design this caching layer"
- "Use sequential thinking to debug why this test is flaky"
- "Break this refactor down into thoughts and revise as you go"
- "Plan the migration with the sequential thinking tool, branching if you see alternatives"
Each call records one thought and returns the current state (thoughtNumber,totalThoughts,nextThoughtNeeded, activebranches, andthoughtHistoryLength). Claude keeps calling the tool — revising, branching, or extending the total as needed — untilnextThoughtNeededis false.
By default, formatted thoughts are pretty-printed tostderras they arrive (useful when running the server interactively or through the MCP Inspector). SetDISABLE_THOUGHT_LOGGING=truein the environment to silence the logging while keeping the structured tool output intact.
# Run with thought logging disabled DISABLE_THOUGHT_LOGGING=true ./mcp_sequential_thinking.py
Both MCP servers supportmultiline search modewhich changes the search behavior:
- File Search Server: Searches file NAMES/PATHS only
- Fuzzy Search Server: Searches line-by-line within file contents
- File Search Server: Switches to searching file CONTENTS instead of names
- Fuzzy Search Server: Treats entire file contents as single searchable units
Multiline mode is for searching file CONTENTS (not names):
- Finding class definitionswith their methods:"class UserService authenticate"(fuzzy match in contents)
- Locating function implementations:"async function await fetch"(all terms in one file)
- Searching for configuration blocks:"database host port"(finds files containing all terms)
- Finding code structuresacross lines:"try catch finally"(fuzzy matches across lines)
- Important: This searches CONTENTS, not file names!
File Search Server Multiline (Content Search)
# With --multiline, searches file CONTENTS instead of names # Find files CONTAINING these terms (not in file names) ./mcp_fd_server.py filter "class constructor method" "" src --multiline # Find Python files CONTAINING specific patterns ./mcp_fd_server.py filter "class def return" "" . --multiline # Find files CONTAINING database configuration ./mcp_fd_server.py filter "database host password" "" config --multiline
# search-files with --multiline searches file CONTENTS (not names) ./mcp_fuzzy_search.py search-files "async function await" src --multiline # search-content with --multiline treats files as single units ./mcp_fuzzy_search.py search-content "try catch finally" . --multiline # Find files CONTAINING class definitions with specific methods ./mcp_fuzzy_search.py search-content "class constructor render" src --multiline
- File size: Multiline mode reads entire files into memory; best for typical source code files
- Result size: Multiline results include complete file contents, which may be truncated for display
- Pattern complexity: Simple fuzzy patterns work well; complex queries may be slower
- Use specific terms:"class MyClass def method"is better than just"class def"(no regex!)
- Combine structure and content:"import React export default"finds React components
- Mind the output: Results show the entire matching file content
- Test incrementally: Start with simple patterns and refine
Both MCP servers usefzf's extended search syntaxfor powerful fuzzy filtering. Understanding this syntax will help you construct precise queries.
IMPORTANT: Thefuzzy_filterparameter infuzzy_search_contentdoes NOT support regular expressions. It uses fzf's fuzzy matching syntax as described below. If you need regex-like patterns, use the position anchors and exact matching features of fzf syntax instead.
Note: These examples show how to achieve regex-like filtering WITHOUT using regular expressions, sincefuzzy_filterdoes not support regex.
# Find Python configuration files, excluding tests config .py$ !test # Find main files in src directory with multiple extensions ^src/ main py$ | js$ | go$ # Find exact package manager files 'package.json' | 'yarn.lock' | 'Pipfile' # Find TODO comments in code files, excluding documentation TODO .py$ | .js$ | .go$ !README !docs/ # Find function definitions, excluding test files 'def ' .py$ !test !spec # Find configuration files with specific extensions, excluding backups config .json$ | .yaml$ | .toml$ !.bak$ !.old$
When usingfuzzy_search_content, queries work on the formatfile:line:content:
Default Mode (matches file paths AND content):
# Find implementation TODOs in specific file types TODO implement .py: | .js: # Matches TODO in .py or .js files # Find error handling in specific files error 'main.py:' | 'app.js:' # Matches 'error' in main.py or app.js # Find updates in test files test.py: update # Matches 'update' in files named test.py # Find async functions with error handling 'async def' error .py$ # Matches in Python files
# With --content-only flag or content_only=true parameter # These will ONLY match the content, not file names: # Find TODO comments regardless of filename TODO implement # Won't match files named 'TODO.txt' # Find async/await patterns async await catch # Pure content search # Find class definitions 'class ' 'def __init__' # Won't match 'class.py' filename
Thefuzzy_search_contenttool acceptsrg_flagsfor enhanced searching. Here are the most useful flags:
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


