使用说明
FS-MCP:通用文件读取器和智能搜索MCP服务器
强大的MCP(模型上下文协议)服务器,提供智能文件读取和语义搜索功能
英语
🚀 特性
- 🧠 智能文本检测:自动识别文本文件,不依赖于文件扩展名
- 📄 多格式支持:处理文本文件和文档格式(Word、Excel、PDF等)
- 🔒 安全第一:仅限制对配置的安全目录的访问
- 📏 范围读数:支持读取大文件的特定行范围
- 🔄 文档转换:通过缓存将文档自动转换为Markdown
- 🔍 矢量搜索:基于AI嵌入的语义搜索
- ⚡ 高性能:批处理和智能缓存支持
- 🌐 多语言:支持英文和中文内容
📋 目录
🚀 快速开始
1.克隆和安装
git clone https://github.com/yourusername/fs-mcp.git
cd fs-mcp
使用紫外线(推荐):
uv sync
使用pip:
pip install -r requirements.txt # If you have a requirements.txt
# OR install directly
pip install fastmcp>=2.0.0 langchain>=0.3.0 python-dotenv>=1.1.0
2.环境配置
创建一个 .env 项目根目录中的文件:
# Security Settings
SAFE_DIRECTORY=. # Directory restriction (required)
MAX_FILE_SIZE_MB=100 # File size limit in MB
# Encoding Settings
DEFAULT_ENCODING=utf-8
# AI Embeddings Configuration (for vector search)
OPENAI_EMBEDDINGS_API_KEY=your-api-key
OPENAI_EMBEDDINGS_BASE_URL=http://your-embedding-service/v1
EMBEDDING_MODEL_NAME=BAAI/bge-m3 # Or your preferred model
EMBEDDING_CHUNK_SIZE=1000
3.启动服务器
python main.py
服务器将于启动 http://localhost:3002 并自动构建矢量索引。
🛠️ 安装
系统要求
- python:3.12或更高
- 操作系统:Windows、macOS、Linux
- 记忆:矢量搜索建议使用4GB以上
- 存储:1GB+用于缓存和索引
依赖项
核心依赖关系在中管理 pyproject.toml:
fastmcp>=2.0.0-MCP服务器框架langchain>=0.3.0-人工智能和矢量搜索python-dotenv>=1.1.0-环境管理- 文档处理库(pandas、openpyxl、python-docx等)
⚙️ 配置
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
SAFE_DIRECTORY |
. |
文件访问的根目录 |
MAX_FILE_SIZE_MB |
100 |
最大文件大小限制 |
DEFAULT_ENCODING |
utf-8 |
默认文件编码 |
OPENAI_EMBEDDINGS_API_KEY |
- | 用于嵌入服务的API密钥 |
OPENAI_EMBEDDINGS_BASE_URL |
- | 嵌入服务URL |
EMBEDDING_MODEL_NAME |
BAAI/bge-m3 |
用于嵌入的AI模型 |
EMBEDDING_CHUNK_SIZE |
1000 |
待处理的文本块大小 |
高级配置
对于生产部署,请考虑:
- 设置速率限制
- 配置日志轮换
- 使用外部矢量数据库
- 设置监控
🔧 MCP工具
1. view_directory_tree
目的:以树格式显示目录结构
view_directory_tree(
directory_path=".", # Target directory
max_depth=3, # Maximum depth
max_entries=300 # Maximum entries to show
)
2. read_file_content
目的:使用行范围支持读取文件内容
read_file_content(
file_path="example.py", # File path
start_line=1, # Start line (optional)
end_line=50 # End line (optional)
)
3. search_documents
目的:跨文档的智能语义搜索
search_documents(
query="authentication logic", # Search query
search_type="semantic", # semantic/filename/hybrid/extension
file_extensions=".py,.js", # File type filter (optional)
max_results=10 # Maximum results
)
4. rebuild_document_index
目的:重建用于搜索的矢量索引
rebuild_document_index() # No parameters needed
5. get_document_stats
目的:获取索引统计信息和系统状态
get_document_stats() # Returns comprehensive stats
6. list_files
目的:列出目录中具有模式匹配的文件
list_files(
directory_path="./src", # Directory to list
pattern="*.py", # File pattern
include_size=True # Include file sizes
)
7. preview_file
目的:快速预览文件内容
preview_file(
file_path="example.py", # File to preview
lines=20 # Number of lines
)
🔍 矢量搜索
能力
- 语义理解:搜索“用户身份验证”找到“登录验证”代码
- 同义词识别:搜索“数据库”找到“数据库”(中文)内容
- 多语言支持:处理英语、中文和混合内容
- 情境感知:了解代码语义和关系
搜索类型
- 语义搜索 (
semantic):人工智能驱动的理解 - 文件名搜索 (
filename):快速文件名匹配 - 扩展搜索 (
extension):按文件类型筛选 - 混合搜索 (
hybrid):结合语义+文件名
技术栈
- 嵌入模型:BAAI/bge-m3(1024维向量)
- 矢量数据库:ChromaDB
- 文本分割:智能语义组块
- 增量更新:基于哈希的更改检测
📁 支持格式
自动检测文本文件
- 编程语言:
.py,.js,.ts,.java,.cpp,.c,.go,.rs等等。 - 配置文件:
.json,.yaml,.toml,.ini,.xml,.env - 文档:
.md,.txt,.rst - Web文件:
.html,.css,.scss - 数据文件:
.csv,.tsv - 无扩展名的文件(自动检测)
文档格式(自动转换为Markdown)
- 微软:
.docx,.xlsx,.pptx - OpenDocument 文件:
.odt,.ods,.odp - 可移植文档格式:
.pdf(文本提取) - 传统格式:
.doc,.xls(有限支持)
🔒 安全功能
访问控制
- 目录限制:访问权限仅限于
SAFE_DIRECTORY和子目录 - 路径横向保护:自动预防
../攻击 - Symlink控制:可配置的符号链接访问
- 文件大小限制:防止读取超大文件
验证
- 路径消毒:自动路径清理和验证
- 权限检查:在访问之前验证读取权限
- 错误处理:优雅的失败,信息丰富
🔗 整合
克劳德桌面
添加到您的Claude Desktop MCP配置中:
{
"mcpServers": {
"fs-mcp": {
"command": "python",
"args": ["main.py"],
"cwd": "/path/to/fs-mcp",
"env": {
"SAFE_DIRECTORY": "/your/project/directory"
}
}
}
}
其他MCP客户端
连接到 http://localhost:3002 使用服务器发送事件(SSE)协议。
API集成
服务器公开了可以与任何MCP兼容客户端集成的标准MCP端点。
🏗️ 项目结构
fs-mcp/
├── main.py # Main MCP server
├── src/ # Core modules
│ ├── __init__.py # Package initialization
│ ├── file_reader.py # Core file reading logic
│ ├── security_validator.py # Security and validation
│ ├── text_detector.py # Intelligent file detection
│ ├── config_manager.py # Configuration management
│ ├── document_cache.py # Document caching system
│ ├── file_converters.py # Document format converters
│ ├── dir_tree.py # Directory tree generation
│ ├── embedding_config.py # AI embedding configuration
│ ├── codebase_indexer.py # Vector indexing system
│ ├── codebase_search.py # Search engine
│ ├── index_scheduler.py # Index scheduling
│ └── progress_bar.py # Progress display utilities
├── tests/ # Test suite
├── cache/ # Document cache (auto-created)
├── logs/ # Log files (auto-created)
├── pyproject.toml # Project configuration
├── .env.example # Environment template
├── .gitignore # Git ignore rules
└── README.md # This file
💻 发展
设置开发环境
# Clone repository
git clone https://github.com/yourusername/fs-mcp.git
cd fs-mcp
# Install with development dependencies
uv sync --group dev
# OR with pip
pip install -e ".[dev]"
运行测试
# Run all tests
pytest
# Run with coverage
pytest --cov=src
# Run specific test
pytest tests/test_file_reader.py
代码质量
# Format code
black src/ tests/
# Lint code
flake8 src/ tests/
# Type checking
mypy src/
调试
实时监控日志:
tail -f logs/mcp_server_$(date +%Y%m%d).log
🤝 贡献
我们欢迎捐款!以下是如何开始:
1.分叉和克隆
git clone https://github.com/yourusername/fs-mcp.git
cd fs-mcp
2.创建特征分支
git checkout -b feature/your-feature-name
3.进行更改
- 遵循现有代码样式
- 添加新功能的测试
- 根据需要更新文档
4.测试您的更改
pytest
black src/ tests/
flake8 src/ tests/
5.提交拉取请求
- 清楚地描述你的变化
- 参考任何相关问题
- 确保所有测试通过
开发指南
- 代码的风格:遵循PEP 8,使用黑色进行格式化
- 测试:保持测试覆盖率在80%以上
- 文档:更新README和文档字符串
- 承诺:使用常规提交消息
- 安全:遵循安全最佳实践
📋 路线图
- [ ] 增强的PDF处理:更好的表格和图像提取
- [ ] 更多嵌入模型:支持本地模型
- [ ] 实时索引:文件系统监视器
- [ ] 高级搜索:正则表达式、邻近性、分面搜索
- [ ] 性能优化:异步处理,缓存改进
- [ ] web界面:用于管理的可选web UI
- [ ] 插件系统:自定义文件类型处理程序
- [ ] 企业功能:身份验证、速率限制、监控
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
📞 支持
中文
🚀 功能特点
- 🧠 智能文本检测: 无需依赖扩展名,自动识别文本文件
- 📄 多格式支持: 支持文本文件和文档格式(Word、Excel、PDF等)
- 🔒 安全验证: 只允许读取配置的安全目录中的文件
- 📏 按行读取: 支持指定行范围读取,便于处理大文件
- 🔄 文档转换: 自动将文档格式转换为Markdown并缓存
- 🔍 向量搜索: 基于AI嵌入的语义搜索
- ⚡ 高性能: 支持批量文件处理和智能缓存
- 🌐 多语言: 支持中英文内容处理
🚀 快速开始
1. 克隆和安装
git clone https://github.com/yourusername/fs-mcp.git
cd fs-mcp
# 推荐使用 uv
uv sync
# 或使用 pip
pip install -r requirements.txt
2. 环境配置
创建 .env 文件:
# 安全设置
SAFE_DIRECTORY=. # 目录访问限制(必需)
MAX_FILE_SIZE_MB=100 # 文件大小限制(MB)
# 编码设置
DEFAULT_ENCODING=utf-8
# AI嵌入配置(用于向量搜索)
OPENAI_EMBEDDINGS_API_KEY=your-api-key
OPENAI_EMBEDDINGS_BASE_URL=http://your-embedding-service/v1
EMBEDDING_MODEL_NAME=BAAI/bge-m3 # 或您偏好的模型
EMBEDDING_CHUNK_SIZE=1000
3. 启动服务器
python main.py
服务器将在 http://localhost:3002 启动并自动建立向量索引。
🛠️ MCP工具说明
详细的工具使用方法请参考英文部分的 MCP工具 章节。
🔍 向量搜索功能
- 概念匹配:搜索"用户认证"能找到"登录验证"相关代码
- 同义词理解:搜索"database"能找到"数据库"相关内容
- 多语言支持:同时理解中英文代码和注释
- 上下文理解:理解代码的语义和上下文关系
📁 支持的文件格式
详细的格式支持请参考英文部分的 支持格式 章节。
🔒 安全特性
- 路径验证: 只允许访问配置的安全目录及其子目录
- 文件大小限制: 防止读取过大文件
- 路径遍历防护: 自动防止
../等路径遍历攻击 - 符号链接控制: 可配置是否允许访问符号链接
🔗 集成方式
Claude Desktop集成
在 Claude Desktop 的 MCP 配置中添加:
{
"mcpServers": {
"fs-mcp": {
"command": "python",
"args": ["main.py"],
"cwd": "/path/to/fs-mcp",
"env": {
"SAFE_DIRECTORY": "/your/project/directory"
}
}
}
}
💻 开发
开发环境设置
# 克隆仓库
git clone https://github.com/yourusername/fs-mcp.git
cd fs-mcp
# 安装开发依赖
uv sync --group dev
运行测试
# 运行所有测试
pytest
# 运行覆盖率测试
pytest --cov=src
🤝 贡献
欢迎贡献代码!请参考英文部分的 贡献 章节了解详细信息。
📄 许可证
本项目采用 MIT 许可证 - 详见 许可证 文件。
由以下材料制成❤️ 对于AI社区
