使用说明
MCP个人-个人MCP服务器集合
一组 模型上下文协议 (MCP)服务器,用于各种个人生产力工具和实用程序。
可用的MCP服务器
1.文件搜索服务器(mcp_fd_server.py)
使用模糊文件名搜索功能 fd 和 fzf:
- 快速文件名搜索 使用
fd(搜索文件名/路径,而不是内容) - 文件名的模糊过滤 随着
fzf用于智能名称匹配 - 模式匹配 文件名支持正则表达式和glob
- 结果限制 随着
limit用于限制匹配次数的参数 - 正确的错误处理 用于fzf退出代码(区分“无匹配”和错误)
- 多行模式 (高级):启用后还可以搜索文件内容
- 独立CLI 用于测试和直接使用
- 关键点:主要目的是按名称查找文件,而不是搜索内容
2.模糊搜索服务器(mcp_fuzzy_search.py)
使用高级搜索功能,同时具有文件名和内容功能 ripgrep 和 fzf:
- 文件名模糊搜索 -按部分/模糊名称查找文件
- 内容搜索 使用
ripgrep在文件中搜索文本 - 模糊滤波 结果使用
fzf --filter - 正确的错误处理 用于fzf退出代码(区分“无匹配”和错误)
- 两种不同的模式:
fuzzy_search_files:搜索文件名称/路径fuzzy_search_content:默认情况下,使用路径+内容匹配搜索文件CONTENTS
- PDF和文档搜索 (可选)-使用以下命令搜索PDF、Office文档和存档
ripgrep-all - PDF页面提取 (可选)-使用支持页面标签的PyMuPDF从PDF中提取特定页面
- PDF信息工具 (可选)-从PDF文件中获取页面标签、页数和目录:
get_pdf_page_labels:从PDF文件中获取所有页面标签get_pdf_page_count:获取PDF文件中的总页数get_pdf_outline:从PDF文件中提取目录/书签
- 简化的界面 -只提供模糊搜索词(不支持正则表达式)
- 多行记录处理 用于复杂模式匹配
- 独立CLI 用于测试和直接使用
3.SQLite服务器(mcp_sqlite_server.py)
具有可配置读/写权限的SQLite数据库操作:
- 默认情况下为只读 -除非明确启用,否则禁止写入操作
- 代理商友好 -清晰的工具描述和示例,便于使用AI代理
- 内存数据库支持 -使用
:memory:用于临时数据库 - 综合运营 -查询、执行、列出表、描述模式、创建表
- 安全功能 -查询验证、写入操作限制、清除错误消息
- 独立CLI 用于测试和直接使用
4.顺序思维服务器(mcp_sequential_thinking.py)
通过结构化的思维链动态、反思性地解决问题——官方的Python移植 @modelcontextprotocol/server-sequential-thinking 服务器:
- 动态解决问题 --将复杂问题分解为离散的、可调整的思维步骤
- 思维修正 --当理解加深时,修改之前的想法(
isRevision/revisesThought) - 分支 --从任何先验思维中探索替代推理路径(
branchFromThought/branchId) - 可调总计 --比例尺
totalThoughts在过程中向上或向下,或超出初始估计needsMoreThoughts - 假设生成与验证 --生成候选解决方案,并对照思维链进行验证
- 字符串强制修复 --接受数字的字符串输入(
thoughtNumber,totalThoughts)和布尔值(nextThoughtNeeded,isRevision,needsMoreThoughts)字段,因此它可以开箱即用Claude Code。包括来自的修复 模型上下文协议/服务器#3856,尚未在npm版本中发布(2025.12.18) - 可选的思想记录 --默认情况下,打印精美的格式化想法会进入stderr;集
DISABLE_THOUGHT_LOGGING=true让他们安静下来 - 单一工具:
sequentialthinking
先决条件
通用要求
- Python 3.10或更高版本
- 紫外线 (推荐)或pip
要安装uv:
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or using pip (if you already have Python)
pip install uv
关于可选功能的说明
模糊搜索服务器中的PDF搜索和提取工具是 可选的。服务器将在没有安装这些二进制文件的情况下工作,只有PDF特定的工具将不可用。这允许您使用核心模糊搜索功能,而不需要所有依赖关系。
文件搜索服务器要求
文件搜索服务器需要以下命令行工具:
macOS
brew install fd fzf
Ubuntu/Debian
sudo apt install fd-find fzf
# Note: On Debian/Ubuntu, fd is installed as 'fdfind'
其他系统
模糊搜索服务器要求
模糊搜索服务器需要:
macOS
brew install ripgrep fzf
# For PDF search capabilities (optional)
brew install ripgrep-all pandoc
pip install PyMuPDF # Or: uv pip install PyMuPDF
Ubuntu/Debian
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安装指南
- fzf安装指南
- ripgrep全部安装 (可选,用于PDF搜索)
- pandoc安装 (可选,用于PDF提取)
安装
克隆存储库
git clone https://github.com/yourusername/mcp-personal.git
cd mcp-personal
配置MCP服务器
使用克劳德代码CLI
将MCP服务器添加到Claude Code的最简单方法是使用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)
注:
- 这
--分隔符在命令及其参数之前很重要 - 环境变量使用
-e KEY=value语法 - 使用
-s user适用于所有项目中可用的个人服务器 - 相对路径和绝对路径都有效
手动配置(克劳德桌面)
对于Claude Desktop,手动将服务器添加到 ~/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
测试和开发
MCP检查员
这 MCP检查员 是一个用于测试和调试MCP服务器的交互式开发工具。它提供了一个基于网络的界面,允许您:
- 目视测试您的MCP服务器 具有交互式UI
- 调试服务器实现 通过检查请求/响应流
- 测试工具、资源和提示 有不同的论点
- 验证服务器行为 部署前
快速测试
使用检查器测试任何MCP服务器:
# 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
这将:
- 启动MCP Inspector代理服务器(默认端口6277)
- 启动web界面(默认端口6274)
- 通过stdio传输连接到MCP服务器
- 打开浏览器进入检查器界面
使用检查器
一旦检查员开始运行:
- 导航到web界面 (通常http://localhost:6274)
- 浏览选项卡:
- 工具:测试
search_files,filter_files,fuzzy_search_files,fuzzy_search_content,fuzzy_search_documents,extract_pdf_pages - 资源:查看任何公开的资源(如果已实施)
- 提示:测试任何暴露的提示(如果已实施)
- 工具:测试
- 测试不同场景:
- 尝试各种搜索模式和过滤器
- 测试多线功能
- 尝试不同的文件路径和标志
- 使用测试PDF搜索
fuzzy_search_documents(如果安装了二进制文件) - 使用测试PDF页面提取
extract_pdf_pages(如果安装了二进制文件) - 验证对无效输入的错误处理
高级配置
您还可以将配置文件用于复杂的设置:
# 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
MCP检查员在以下方面特别有价值:
- 快速原型制作 -快速测试新功能
- 调试 -在与Claude集成之前识别问题
- 文档 -准确了解服务器暴露的内容
- 验证 -确保正确的错误处理和边缘情况
用法
文件搜索服务器
作为MCP服务器
在Claude Desktop中配置后,您可以使用自然语言按名称搜索文件:
- “查找src目录中的所有Python文件”(搜索以.py结尾的文件名)
- “搜索名称中包含'config'的文件”(模糊匹配文件名)
- “按名称查找测试文件”(搜索名称中包含“test”的文件)
- “使用模糊搜索查找'mainpy'”(查找main.py、main_py.txt等)
CLI使用情况
文件搜索服务器还可以作为独立的CLI工具使用:
# 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
模糊搜索服务器
作为MCP服务器
在Claude Desktop中配置后,您可以使用自然语言进行高级搜索:
- “搜索提及“实施”的TODO注释”
- “使用模糊搜索查找名称中包含'test'的所有文件”
- “在Python文件中查找错误处理代码”
- “搜索包含数据库设置的配置文件”
- “查找名为'update_ondemandd_max_fused'的方法定义”
- “搜索具有错误处理功能的异步函数”
- “仅在test.py文件中搜索'update'”(有效,因为默认模式也匹配路径!)
- “仅在内容中搜索‘async’,忽略文件路径”(使用content_only模式)
- “在PDF文档中搜索'vector'”(需要ripgrep-all)
- “在PDF和Word文档中查找所有与‘机器学习’相关的参考文献”
- “从用户手册PDF中提取第5-10页”
- “从研究论文PDF中获取目录”
- “显示用户手册中的章节大纲”
CLI使用情况
模糊搜索服务器还可以作为一个独立的CLI工具:
# 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
SQLite服务器
作为MCP服务器
在Claude Desktop中配置后,您可以使用自然语言进行数据库操作:
- “列出数据库中的所有表”
- “显示用户表的架构”
- “从订单表中查询最近10个订单”
- “统计数据库中的活动用户”
- “对于一年未登录的用户,将用户状态更新为非活动”(需要写入权限)
- “创建用于存储会话数据的新表”(需要写入权限)
CLI使用情况
SQLite服务器还可以作为一个独立的CLI工具:
# 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:
顺序思维服务器
作为MCP服务器
配置后,Claude可以调用 sequentialthinking 以明确、可修改的步骤解决问题。触发它的自然语言提示:
- “逐步思考如何设计此缓存层”
- “使用顺序思维来调试为什么这个测试不稳定”
- “将此重构分解为想法,并在进行时进行修改”
- “使用顺序思维工具规划迁移,如果看到替代方案,则进行分支”
每次通话记录一个想法并返回当前状态(thoughtNumber, totalThoughts, nextThoughtNeeded,活跃 branches,以及 thoughtHistoryLength).Claude不断调用该工具——根据需要修改、分支或扩展总数——直到 nextThoughtNeeded 是假的。
日志记录
默认情况下,格式化的想法会很好地打印到 标准错误 当它们到达时(在交互式或通过MCP检查器运行服务器时很有用)。集 DISABLE_THOUGHT_LOGGING=true 在保持结构化工具输出完整的同时,使日志记录静音。
# Run with thought logging disabled
DISABLE_THOUGHT_LOGGING=true ./mcp_sequential_thinking.py
多行搜索模式
两个MCP服务器都支持 多行搜索模式 这改变了搜索行为:
什么是多行模式?
默认行为(多行=false):
- 文件搜索服务器:仅搜索文件名/PATHS
- 模糊搜索服务器:在文件内容中逐行搜索
在多行模式下(多行=真):
- 文件搜索服务器:切换到搜索文件内容而不是名称
- 模糊搜索服务器:将整个文件内容视为单个可搜索单元
何时使用多行模式
多行模式用于搜索文件内容(不是名称):
- 查找类定义 他们的方法:
"class UserService authenticate"(内容模糊匹配) - 定位功能实现:
"async function await fetch"(所有术语放在一个文件中) - 搜索配置块:
"database host port"(查找包含所有术语的文件) - 查找代码结构 跨线:
"try catch finally"(跨线模糊匹配) - 重要:搜索内容,而不是文件名!
多行示例
文件搜索服务器多行(内容搜索)
# 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
性能考量
- 文件大小:多行模式将整个文件读入内存;最适合典型的源代码文件
- 结果大小:多行结果包括完整的文件内容,这些内容可能会被截断以供显示
- 模式复杂性:简单的模糊模式效果很好;复杂的查询可能会变慢
多行查询提示
- 使用特定术语:
"class MyClass def method"比仅仅好"class def"(没有正则表达式!) - 结合结构和内容:
"import React export default"查找React组件 - 注意输出:结果显示整个匹配的文件内容
- 增量测试:从简单的模式开始并完善
fzf搜索语法指南
两台MCP服务器都使用 fzf的扩展搜索语法 用于强大的模糊过滤。理解此语法将帮助您构建精确的查询。
重要:The fuzzy_filter 参数在 fuzzy_search_content 不支持正则表达式。它使用fzf的模糊匹配语法,如下所述。如果您需要类似正则表达式的模式,请使用fzf语法的位置锚点和精确匹配功能。
基本语法
| 模式 | 描述 | 示例 |
|---|---|---|
term |
模糊匹配(默认) | config 匹配“配置” |
term1 term2 |
AND逻辑(所有项必须匹配) | main config 需要这两个术语 |
term1 | term2 |
OR逻辑(任何项都可以匹配) | py$ | js$ | go$ 匹配以任何结尾的文件 |
精确匹配
| 模式 | 描述 | 示例 |
|---|---|---|
'term |
部分完全匹配 | 'main 与“main”子字符串完全匹配 |
'term' |
精确边界匹配 | 'main.py' 完全匹配单词边界 |
定位锚
| 模式 | 描述 | 示例 |
|---|---|---|
^term |
前缀匹配(以开头) | ^src 匹配“src/file.py” |
term$ |
后缀匹配(以结尾) | .json$ 匹配“config.json” |
^term$ |
完全匹配(整个字符串) | ^README$ 仅匹配“README” |
否定(排除)
| 模式 | 描述 | 示例 |
|---|---|---|
!term |
排除模糊匹配 | config !test 排除测试文件 |
!'term |
排除完全匹配项 | !'backup' 排除具有精确“备份”的文件 |
!^term |
排除前缀匹配 | !^. 排除隐藏文件 |
!term$ |
排除后缀匹配项 | !.tmp$ 排除临时文件 |
高级示例
备注:这些示例展示了如何在不使用正则表达式的情况下实现类似正则表达式的过滤,因为 fuzzy_filter 不支持正则表达式。
# 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$
内容搜索特定模式
当使用 fuzzy_search_content,查询按格式工作 file:line: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
ripgrep(rg)标志参考
这 fuzzy_search_content 工具接受 rg_flags 以增强搜索。以下是最有用的标志:
区分大小写
| 标志 | 描述 | 示例 |
|---|---|---|
-i, --ignore-case |
不区分大小写的搜索 | rg -i "todo" 匹配一切,一切,一切 |
-S, --smart-case |
小写时不区分大小写,混合时敏感 | rg -S "Todo" 区分大小写 |
-s, --case-sensitive |
强制区分大小写(默认) | rg -s "TODO" 仅匹配TODO |
文件类型筛选
| 标志 | 描述 | 示例 |
|---|---|---|
-t TYPE |
仅搜索特定文件类型 | -t py 仅搜索Python文件 |
-T TYPE |
排除特定文件类型 | -T test 排除测试文件 |
--type-list |
显示所有支持的文件类型 | rg --type-list |
上下文行
| 标志 | 描述 | 示例 |
|---|---|---|
-A NUM |
比赛后显示NUM行 | -A 3 显示后面的3行 |
-B NUM |
比赛前显示NUM行 | -B 2 显示前两行 |
-C NUM |
显示前后的NUM行 | -C 3 两侧显示3条线 |
文件处理
| 标志 | 描述 | 示例 |
|---|---|---|
--hidden |
搜索隐藏的文件/目录 | --hidden 包括.隐藏文件 |
--no-ignore |
忽略.gitignore规则 | --no-ignore 搜索忽略的文件 |
-u |
减少过滤(1-3次) | -uu = --no-ignore --hidden |
模式匹配
| 标志 | 描述 | 示例 |
|---|---|---|
-F |
文字字符串搜索(无正则表达式) | -F 搜索精确文本 |
-w |
仅匹配整个单词 | -w 不匹配部分单词 |
-v |
反转比赛(显示非比赛) | -v 显示没有匹配项的线条 |
-x |
仅匹配整行 | -x 匹配精确线 |
高级功能
| 标志 | 描述 | 示例 |
|---|---|---|
-U |
启用多行匹配 | -U (注意:改用多行参数) |
-P |
使用PCRE2正则表达式引擎 | -P 用于高级正则表达式功能 |
-o |
仅显示匹配的零件 | -o 仅显示匹配的文本 |
输出控制
| 标志 | 描述 | 示例 |
|---|---|---|
-c |
统计每个文件的匹配项 | -c 仅显示计数 |
-l |
仅显示匹配的文件名 | -l 列出匹配的文件 |
--column |
显示列号 | --column 包括列信息 |
实用组合
# Case-insensitive search with context in Python files
rg_flags: "-i -C 3 -t py"
# Search all files including hidden and ignored, with context
rg_flags: "-uu -C 2"
# Find exact function signatures in code files
rg_flags: "-F -w -t py -t js -t go"
# Search for TODOs with file types, case insensitive, show context
rg_flags: "-i -C 1 -t py -t js --no-ignore"
# Multi-line class definitions with context
rg_flags: "-U -C 3 -t py"
# Literal string search in all text files
rg_flags: "-F --no-ignore -t txt -t md -t rst"
MCP工具文档
文件搜索服务器工具
search_files
使用带有正则表达式或glob模式的fd按NAME查找文件。
目的: 当你知道文件名的确切模式、扩展名或正则表达式时,搜索文件。
参数:
pattern(必需):正则表达式或glob模式以匹配文件名path(可选):要搜索的目录(默认为当前目录)limit(可选):返回的最大结果数(默认值:0=无限制)flags(可选):传递给fd的其他标志
例子:
{
"pattern": r"\.py$", # Find files with names ending in .py
"path": "/home/user/projects",
"flags": "--hidden --no-ignore"
}
filter_files
使用fzf的模糊匹配按名称模糊搜索文件。
目的: 在只知道部分或近似文件名的情况下查找文件。
参数:
filter(必填):与文件名/路径匹配的模糊搜索字符串pattern(可选):fd预过滤的初始模式path(可选):要搜索的目录first(可选):仅返回最佳匹配项limit(可选):返回的最大结果数(默认值:0=无限制)fd_flags(可选):fd的额外标志fzf_flags(可选):fzf的额外标志multiline(可选):如果为true,则搜索文件CONTENTS而不是名称(默认值:false)
注意:当两者都 first 和 limit 提供, first 优先,只返回最佳匹配。
示例(文件名搜索):
{
"filter": "test", # Fuzzy match 'test' in file names
"pattern": r"\.py$", # Only Python files
"path": "./src",
"first": true
}
多行示例(内容搜索):
{
"filter": "class function return", # Find files containing all these terms
"pattern": "",
"path": "./src",
"multiline": true # Search CONTENTS, not names
}
模糊搜索服务器工具
fuzzy_search_files
使用模糊匹配搜索文件名/PATHS。
目的: 当你只知道部分名称时,按名称查找文件(例如,“mainpy”找到“main.py”)。
参数:
fuzzy_filter(必填):文件名/路径的模糊搜索字符串path(可选):要搜索的目录(默认为当前目录)hidden(可选):包含隐藏文件(默认值:false)limit(可选):返回的最大结果数(默认值:20)multiline(可选):如果为true,则搜索文件CONTENTS而不是名称(默认值:false)confirm_root(可选):允许从根目录搜索(/)(默认值:false)
示例(文件名搜索):
{
"fuzzy_filter": "main", # Finds main.py, main.js, domain.py, etc.
"path": "/home/user/projects",
"hidden": true,
"limit": 10
}
多行示例(内容搜索):
{
"fuzzy_filter": "import export", # Find files containing both terms
"path": "./src",
"multiline": true, # Search CONTENTS, not names
"limit": 5
}
fuzzy_search_content
使用模糊过滤搜索文件内容,默认情况下在文件路径和内容上进行匹配。
目的: 使用模糊搜索查找特定的文本/代码,该搜索考虑了它在哪里(路径)和它是什么(内容)。与目录和单个文件一致。
参数:
fuzzy_filter(必填):用于过滤的模糊搜索查询(不支持正则表达式-使用fzf语法)path(可选):要搜索的目录/文件(默认为当前目录)- 增强的文件路径支持:现在可以搜索目录和单个文件
- 在搜索单个文件以获得一致结果时,自动在输出中包含文件名
hidden(可选):搜索隐藏文件(默认值:false)limit(可选):返回的最大结果数(默认值:20)rg_flags(可选):ripgrep的额外标志(请参阅ripgrep标志参考)multiline(可选):启用多行记录处理(默认值:false)content_only(可选):仅在内容上匹配,忽略文件路径(默认值:false)confirm_root(可选):允许从根目录搜索(/)(默认值:false)
匹配行为:
- 默认值(content_only=false):匹配文件路径和内容(跳过行号)
- 这就是为什么
"test.py: update"在test.py文件中找到“update”-它与路径匹配! - 搜索
"src TODO"在src/目录下的文件中查找TODO注释 - 哪怕只是
"update"将匹配名为“update.py”或包含“update”的文件
- 这就是为什么
- content_only=true:仅匹配内容,完全忽略文件路径
- 纯内容搜索-
"update"不匹配“update.py”文件名,仅匹配内容
- 纯内容搜索-
示例(默认-路径+内容):
{
"fuzzy_filter": "test.py: TODO implement", # Find TODOs in test.py files
"path": "./src",
"rg_flags": "-i",
"limit": 15
}
示例(单文件搜索):
{
"fuzzy_filter": "function async", # Find async functions in a specific file
"path": "./src/main.py", # Search within a single file
"limit": 10
}
示例(仅内容):
{
"fuzzy_filter": "async await catch", # Find these terms in content only
"path": "./src",
"content_only": true, # Ignore file paths in matching
"limit": 10
}
fuzzy_search_documents
使用ripgrep-all搜索PDF和其他文档格式(需要可选的二进制文件)。
目的: 搜索常规文本搜索无法处理的PDF、Office文档、存档和其他二进制格式。
参数:
fuzzy_filter(必填):文档内容的模糊搜索查询path(可选):要搜索的目录/文件(默认为当前目录)file_types(可选):要搜索的逗号分隔的文件类型(例如,“pdf、docx、epub”)preview(可选):包括预览上下文(默认值:true)limit(可选):返回的最大结果数(默认值:20)confirm_root(可选):允许从根目录搜索(/)(默认值:false)
例子:
{
"fuzzy_filter": "machine learning algorithm",
"path": "./research",
"file_types": "pdf,epub",
"limit": 10
}
退货:
{
"matches": [
{
"file": "/path/to/document.pdf",
"line": 0,
"content": "topology.", # Content without "Page N: " prefix
"match_text": "topology",
"page": 542, # 1-based page number (from ripgrep-all)
"page_index_0based": 541, # 0-based page index for programmatic access
"page_label": "19" # Actual PDF page label (only for PDFs with PyMuPDF)
}
]
}
注: 对于PDF文件,该工具返回:
page:来自ripgrep-all的从1开始的页码(例如,542表示第542页)page_index_0based:用于程序化访问的基于0的页面索引(例如,541用于页面542)page_label:PDF阅读器中显示的实际页面标签(例如“vii”、“ToC”、“19”)
内容字段不再包含“页面N:”前缀,以获得更清晰的输出。
extract_pdf_pages
从PDF中提取特定页面,并使用PyMuPDF转换为各种格式。
目的: 从PDF中提取单个页面或页面范围,并支持PDF阅读器中显示的页面标签/别名。
参数:
file(必填):PDF文件的路径pages(必填):逗号分隔的页面规范-支持:- 页面标签:“v”、“vii”、“ToC”、“Introduction”(如PDF阅读器所示)
- 页面范围:“v-vii”,“1-5”
- 物理页面:“1”、“14”(如果未作为标签找到,则以1为基础)
- 混合:“v,vii,1,5-8,ToC”
format(可选):输出格式-markdown、html、plain(默认:markdown)preserve_layout(可选):尝试保留原始布局(默认:false)clean_html(可选):删除HTML样式标签,如<span style="...">(默认值:true)fuzzy_hint(可选):模糊搜索字符串,按内容过滤提取的页面zero_based(可选):将页码解释为从0开始的索引(默认值:false)- 当为真时,所有数字都被视为直接的基于0的页面索引
- “0”=第一页,“266”=第267页,“0-4”=前5页
- 如果为真,则不执行页面标签查找
- 不能与一起使用
one_based
one_based(可选):将页码解释为从1开始的索引(默认值:false)- 当为true时,所有数字都被视为直接的基于1的页面索引
- “1”=第一页,“267”=第267页,“1-5”=前5页
- 如果为真,则不执行页面标签查找
- 不能与一起使用
zero_based
例子:
{
"file": "research_paper.pdf",
"pages": "v-vii,1,5-10,ToC", # Mix of page labels and numbers
"format": "markdown",
"clean_html": true,
"fuzzy_hint": "neural network" # Only include pages mentioning this
}
# Example with zero_based=true
{
"file": "research_paper.pdf",
"pages": "0,266-273", # Direct 0-based indices: page 1 and pages 267-274
"zero_based": true
}
# Example with one_based=true
{
"file": "research_paper.pdf",
"pages": "1,267-274", # Direct 1-based indices: pages 1, 267-274
"one_based": true
}
get_pdf_page_labels
从PDF文件中获取所有页面标签。
目的: 返回页面索引与其标签/别名的映射,如PDF阅读器所示,有助于在提取之前了解可用的页面标签。
参数:
file(必填):PDF文件的路径start(可选):切片结果的从0开始的索引(默认值:0)limit(可选):要返回的最大标签数(默认值:所有页面)
例子:
{
"file": "research_paper.pdf"
}
# Returns something like:
{
"page_labels": {
"0": "Cover",
"1": "i",
"2": "ii",
"3": "iii",
"4": "iv",
"5": "v",
"6": "vi",
"7": "vii",
"8": "viii",
"9": "1",
"10": "2",
"11": "3"
},
"page_count": 150
}
# Example with slicing:
{
"file": "research_paper.pdf",
"start": 100,
"limit": 20
}
# Returns subset like:
{
"page_labels": {
"100": "87",
"101": "88",
"102": "89",
"103": "90",
"104": "91"
# ... up to 20 entries
},
"page_count": 150
}
get_pdf_page_count
获取PDF文件中的总页数。
目的: 返回总页数,这对于理解提取前的文档大小非常有用。
参数:
file(必填):PDF文件的路径
例子:
{
"file": "research_paper.pdf"
}
# Returns:
{
"page_count": 150
}
get_pdf_outline
从PDF文件中提取目录(大纲/书签)。
目的: 返回具有级别、标题、页码和页面标签的分层大纲结构,有助于导航复杂的PDF和理解文档结构。
参数:
file(必填):PDF文件的路径simple(可选):返回基本信息(默认值:true)或带链接数据的详细信息(false)max_depth(可选):轮廓层次中可遍历的最大深度(默认值:无限制)fuzzy_filter(可选):使用fzf按标题过滤大纲条目的模糊搜索字符串
例子:
{
"file": "research_paper.pdf"
}
# Returns (simple mode):
{
"outline": [
[1, "Introduction", 1, "i"],
[1, "Chapter 1: Background", 5, "1"],
[2, "1.1 History", 6, "2"],
[2, "1.2 Related Work", 10, "6"],
[1, "Chapter 2: Methods", 15, "11"],
[2, "2.1 Data Collection", 16, "12"],
[3, "2.1.1 Sources", 17, "13"],
[2, "2.2 Analysis", 20, "16"]
],
"total_entries": 8,
"max_depth_found": 3
}
# Example with filtering:
{
"file": "research_paper.pdf",
"fuzzy_filter": "chapter"
}
# Returns:
{
"outline": [
[1, "Chapter 1: Background", 5, "1"],
[1, "Chapter 2: Methods", 15, "11"]
],
"total_entries": 8,
"max_depth_found": 3,
"filtered_count": 2
}
# Example with detailed output:
{
"file": "research_paper.pdf",
"simple": false,
"max_depth": 2
}
# Returns:
{
"outline": [
[1, "Introduction", 1, "i", {
"page": 1,
"uri": "#page=1&zoom=100,0,0",
"is_external": false,
"is_open": true,
"dest": {
"kind": 1,
"page": 0,
"uri": "#page=1&zoom=100,0,0"
}
}],
# ... more entries with link details
],
"total_entries": 8,
"max_depth_found": 2
}
大纲格式:
- 简单模式返回:
[level, title, page, page_label]level:层次结构级别(从1开始,1=顶层)title:书签/大纲条目标题page:页码(从1开始)page_label:PDF阅读器中显示的页面标签(例如,“i”、“ii”、“1”、“ToC”)
- 详细模式添加了第五个元素,其中包含链接信息,包括目的地详细信息
SQLite服务器工具
query
在数据库上执行SELECT查询。
参数:
query(必需):执行SELECT查询db_path(可选):SQLite数据库的路径(默认为配置的db_Path或“:memory:”)
例子:
{
"query": "SELECT * FROM users WHERE active = 1 ORDER BY created_at DESC LIMIT 10",
"db_path": "myapp.db"
}
execute
执行INSERT、UPDATE或DELETE查询(需要写权限)。
参数:
query(必需):要执行的INSERT、UPDATE或DELETE查询db_path(可选):SQLite数据库的路径
例子:
{
"query": "UPDATE users SET last_login = datetime('now') WHERE id = 123",
"db_path": "myapp.db"
}
list_tables
列出数据库中的所有表。
参数:
db_path(可选):SQLite数据库的路径
例子:
{
"db_path": "myapp.db"
}
describe_table
获取特定表的详细架构信息,包括列、类型、约束和索引。
参数:
table_name(必填):要描述的表的名称db_path(可选):SQLite数据库的路径
例子:
{
"table_name": "users",
"db_path": "myapp.db"
}
create_table
使用指定列创建新表(需要写权限)。
参数:
table_name(必填):要创建的表的名称columns(必填):列定义列表db_path(可选):SQLite数据库的路径
列定义:
name(必填):列名type(必填):SQLite数据类型(TEXT、INTEGER、REAL、BLOB等)constraints(可选):列约束(主键、NOT NULL、UNIQUE等)
例子:
{
"table_name": "sessions",
"columns": [
{
"name": "id",
"type": "TEXT",
"constraints": "PRIMARY KEY"
},
{
"name": "user_id",
"type": "INTEGER",
"constraints": "NOT NULL"
},
{
"name": "created_at",
"type": "TIMESTAMP",
"constraints": "DEFAULT CURRENT_TIMESTAMP"
},
{
"name": "expires_at",
"type": "TIMESTAMP",
"constraints": "NOT NULL"
}
],
"db_path": "myapp.db"
}
顺序思维服务器工具
sequentialthinking
在动态、可修改的思维链中记录一个步骤。反复调用——修改、分支或扩展总数——直到 nextThoughtNeeded 是假的。
参数:
thought(必填,字符串):当前思考步骤。可以是分析步骤、对先前想法的修正、问题、假设或验证。nextThoughtNeeded(必填,布尔值):是否需要另一个思考步骤。接受true/false或字符串"true"/"false".thoughtNumber(必填,整数≥1):序列中的当前思维数。接受数字或数字字符串值。totalThoughts(必填,整数≥1):当前所需总想法的估计值。可以在通话之间向上或向下调整。接受数字或数字字符串值。isRevision(可选,布尔值):这个想法是否修改了之前的想法。revisesThought(可选,整数≥1):当isRevision这是真的,思想数字正在被重新考虑。branchFromThought(可选,整数≥1):分支时,该分支所偏离的思想数。branchId(可选,字符串):当前分支的标识符。needsMoreThoughts(可选,布尔值):如果你到达终点,但意识到需要更多的想法,则设置为true。
输出(结构化):
thoughtNumber,totalThoughts,nextThoughtNeeded,branches(活动分支id列表),thoughtHistoryLength.
例子:
{
"thought": "First, I need to map out the failure modes before proposing a fix.",
"nextThoughtNeeded": true,
"thoughtNumber": 1,
"totalThoughts": 5
}
修订示例:
{
"thought": "Reconsidering thought 2 — the retry logic is actually the root cause, not the timeout.",
"nextThoughtNeeded": true,
"thoughtNumber": 4,
"totalThoughts": 6,
"isRevision": true,
"revisesThought": 2
}
分支示例:
{
"thought": "Alternative approach: skip the cache entirely and hit the DB directly.",
"nextThoughtNeeded": true,
"thoughtNumber": 5,
"totalThoughts": 7,
"branchFromThought": 3,
"branchId": "no-cache"
}
注: 所有数字和布尔字段也接受字符串输入(例如。 "1", "true").这是修复 模型上下文协议/服务器#3856 这就是为什么服务器可以从Claude Code中使用,Claude Code有时会将这些字段序列化为字符串。
发展
项目结构
mcp-personal/
├── mcp_fd_server.py # File search MCP server
├── mcp_fuzzy_search.py # Fuzzy content search MCP server
├── mcp_sqlite_server.py # SQLite database MCP server
├── mcp_sequential_thinking.py # Sequential thinking MCP server
├── tests/ # Test suite
│ ├── test_simple.py # Direct function tests
│ ├── test_fd_server.py # File search MCP integration tests
│ ├── test_fuzzy_search.py # Fuzzy search tests
│ ├── test_sqlite_server.py # SQLite server tests
│ ├── test_sequential_thinking.py # Sequential thinking tests
│ └── test_cli.py # CLI interface tests
├── pyproject.toml # Project configuration
├── Makefile # Development commands
├── CLAUDE.md # Claude-specific instructions
└── README.md # This file
添加新的MCP服务器
要将新的MCP服务器添加到此集合中,请执行以下操作:
- 创建一个新的Python文件(例如。,
mcp_new_server.py) - 使用FastMCP框架实现
- 在中添加测试
tests/目录 - 用文档更新此README
- 添加Claude Desktop的配置示例
运行测试
# Run all tests
make test
# Run specific test categories
make test-simple # Direct function tests
make test-cli # CLI interface tests
make test-full # Full MCP integration tests
# Run with coverage
make test-cov
开发命令
make help # Show all available commands
make setup # Install development dependencies
make test # Run tests
make lint # Run linting
make format # Format code
make type-check # Run type checking
make clean # Clean generated files
贡献
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 进行更改
- 运行测试(
make test) - 跑linting(
make check) - 提交您的更改
- 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
建筑
此集合中的所有MCP服务器都是使用以下方式构建的:
- FastMCP:来自官方Python SDK的高级MCP服务器框架
- 紫外线:快速Python包管理器
- 独立脚本:每台服务器使用
#!/usr/bin/env -S uv run --script便于部署
文件搜索服务器
其他用途:
- 文件描述符:用Rust编写的现代文件查找器
- 模糊查找:命令行模糊查找器
模糊搜索服务器
其他用途:
- ripgrep:非常快速的搜索工具,尊重gitignore
- 模糊查找:命令行模糊查找器(用于过滤模式)
顺序思维服务器
纯Python——不需要额外的二进制文件。在进程的生命周期内维护一个内存中的想法列表和一个分支图;状态在运行之间不持久。
安全考虑
将军
- 所有服务器都在执行它们的用户的权限下运行
- 考虑每台服务器功能的安全影响
- 安装前检查服务器代码
根路径保护
- 内置安全机制:默认情况下,所有搜索功能都防止从根目录(/)意外搜索
- 在没有明确确认的情况下从根目录搜索会返回错误消息
- 要从根目录搜索,必须显式设置
confirm_root=True(MCP工具)或使用--confirm-root标志(CLI) - 这可以防止意外的性能问题和过度的文件系统访问
- 跨平台支持:防止Unix根目录(/)和Windows驱动器根目录(C:等)
文件搜索服务器
- 具有基于用户权限的文件系统访问权限
- 在敏感目录中搜索时要小心
- 这
--no-ignore标志将包括通常被隐藏的文件.gitignore
模糊搜索服务器
- 具有基于用户权限的文件系统读取权限
- 可以搜索文件内容,包括源代码和配置文件
- 尊重
.gitignore默认情况下(使用--hidden包含被忽略的文件) - 在包含敏感数据的存储库中搜索时请注意
SQLite服务器
- 默认情况下为只读 -防止意外修改数据
- 写入操作需要显式
--allow-writes标志或环境变量 - 具有基于文件权限的完全数据库访问权限
- 启用写入模式时可以执行任意SQL查询
- 对生产数据库的写权限要非常谨慎
- 尽可能考虑使用单独的只读数据库用户
顺序思维服务器
- 没有文件系统、网络或数据库访问权限
- 仅将思想存储在记忆中;进程运行之间没有持久性
- 形成的思想是写给 标准错误 默认情况下--set
DISABLE_THOUGHT_LOGGING=true如果想法可能包含您不希望出现在父进程的stderr流中的敏感内容
故障排除
“找不到 fd 二进制”
- 确保fd已安装并位于PATH中
- 在Debian/Ubuntu上,fd可能安装为
fdfind
“找不到 fzf 二进制”
- 使用包管理器安装fzf
- 确保它在您的PATH中可用
“从根目录(/)搜索可能不正确,速度可能非常慢”
- 在没有明确确认的情况下尝试从根目录搜索时,会出现此安全消息
- 要从根目录搜索,请添加
confirm_root=True参数(MCP工具)或--confirm-root标志(CLI) - 考虑使用更具体的目录路径,以获得更好的性能
- 例子:
./mcp_fuzzy_search.py search-files "config" / --confirm-root
测试失败
- 检查是否为每台服务器安装了所需的二进制文件
- 跑
make check-deps验证二进制文件是否可用 - 有些测试需要类Unix环境
许可证
该项目是开源的,可在 MIT许可证.
致谢
文件搜索服务器
模糊搜索服务器
- ripgrep -递归搜索目录中的文本模式
- 模糊查找 -命令行模糊查找器
- PyMuPDF -用于PDF处理的MuPDF的Python绑定(可选)
- ripgrep全部 -ripgrep,还可以搜索PDF、电子书、Office文档(可选)
- 潘多克。 -通用标记转换器(可选)
SQLite服务器
- SQLite -自给自足、无服务器、零配置的SQL数据库引擎
顺序思维服务器
- @模型上下文协议/服务器顺序思维 -这个服务器是从原始的TypeScript服务器移植过来的
