二、方案选型
2.1 什么是 Filesystem MCP?
Filesystem MCP 是一个 Model Context Protocol(MCP)服务器,它允许 AI 助手直接操作本地文件系统。换句话说,你可以用自然语言指挥 AI 读写、搜索、分析本地文件。
2.2 为什么选择它?
| 方案 | 优点 | 缺点 |
|---|---|---|
| 手动操作 | 无需技术准备 | 效率低、易遗漏 |
| 脚本工具 | 可定制 | 需要编写代码 |
| IDE 插件 | 集成方便 | 功能有限 |
| Filesystem MCP | AI 直接控制、无需编写脚本 | 需要 MCP 环境 |
三、实现步骤
3.1 环境准备
首先,你需要安装 Filesystem MCP。以下是安装命令:
# 使用 uvx 安装
uvx mcp-server-filesystem
3.2 配置 MCP
在项目的 MCP 配置文件中添加:
{
"mcpServers": {
"filesystem": {
"command": "uvx",
"args": ["mcp-server-filesystem", "/path/to/allowed/directory"]
}
}
}
3.3 配置可访问目录
出于安全考虑,Filesystem MCP 需要配置允许访问的目录。建议只配置项目根目录:
{
"mcpServers": {
"filesystem": {
"command": "uvx",
"args": [
"mcp-server-filesystem",
"./"
]
}
}
}
3.4 自动化项目分析
配置完成后,你可以直接用自然语言指挥 AI。以下是我们当时使用的提示词:
请帮我完成以下任务:
1. 分析当前项目的目录结构
2. 列出所有源代码文件(.js, .ts, .py, .go 等)
3. 统计每个目录的代码行数
4. 生成项目结构文档
AI 会自动:
- 遍历项目目录
- 统计文件和代码行数
- 生成结构化文档
3.5 自动化文档生成
请帮我完成以下任务:
1. 读取所有 API 相关文件(routes, controllers, api 目录)
2. 提取接口路径、请求方法、参数说明
3. 生成 API 文档(Markdown 格式)
4. 保存到 docs/api.md
四、核心代码示例
虽然 MCP 可以用自然语言操作,但有些场景我们还是需要编写脚本。以下是一个使用 Node.js 的示例:
const fs = require('fs');
const path = require('path');
// 递归获取目录下的所有文件
function getAllFiles(dir, extensions = []) {
const files = [];
function traverse(currentPath) {
const items = fs.readdirSync(currentPath);
for (const item of items) {
const fullPath = path.join(currentPath, item);
const stat = fs.statSync(fullPath);
if (stat.isDirectory()) {
// 跳过 node_modules 等目录
if (!['node_modules', '.git', 'dist', 'build'].includes(item)) {
traverse(fullPath);
}
} else if (stat.isFile()) {
// 根据扩展名过滤
if (extensions.length === 0 ||
extensions.some(ext => item.endsWith(ext))) {
files.push(fullPath);
}
}
}
}
traverse(dir);
return files;
}
// 统计代码行数
function countLines(filePath) {
const content = fs.readFileSync(filePath, 'utf-8');
return content.split('\n').length;
}
// 生成项目结构文档
function generateProjectDoc(projectRoot) {
const structure = {
totalFiles: 0,
totalLines: 0,
byExtension: {},
directories: []
};
const files = getAllFiles(projectRoot, ['.js', '.ts', '.py', '.go', '.java']);
for (const file of files) {
structure.totalFiles++;
const lines = countLines(file);
structure.totalLines += lines;
const ext = path.extname(file);
structure.byExtension[ext] = (structure.byExtension[ext] || 0) + 1;
}
return structure;
}
// 提取 TODO 和 FIXME
function extractTodos(projectRoot) {
const files = getAllFiles(projectRoot, ['.js', '.ts', '.py', '.go', '.java']);
const todos = [];
for (const file of files) {
const content = fs.readFileSync(file, 'utf-8');
const lines = content.split('\n');
lines.forEach((line, index) => {
if (line.includes('TODO') || line.includes('FIXME')) {
todos.push({
file: path.relative(projectRoot, file),
line: index + 1,
content: line.trim()
});
}
});
}
return todos;
}
// 生成 API 文档
function generateAPIDoc(apiDir) {
if (!fs.existsSync(apiDir)) {
return null;
}
const files = getAllFiles(apiDir, ['.js', '.ts']);
let doc = '# API 文档\n\n';
for (const file of files) {
const content = fs.readFileSync(file, 'utf-8');
const relativePath = path.relative(process.cwd(), file);
doc += `## ${relativePath}\n\n`;
// 简单的路由提取(实际使用中需要更复杂的解析)
const routes = content.match(/@(Get|Post|Put|Delete|Patch)\s+(\/[^\s]+)/g);
if (routes) {
routes.forEach(route => {
doc += `- ${route}\n`;
});
}
doc += '\n';
}
return doc;
}
五、效果对比
| 指标 | 手动操作 | MCP 自动化 |
|---|---|---|
| 项目结构分析 | 1-2 小时 | 约 1 分钟 |
| API 文档生成 | 2-3 小时 | 约 5 分钟 |
| TODO 收集 | 30 分钟 | 约 30 秒 |
| 代码规范检查 | 1-2 小时 | 约 5 分钟 |
六、更多应用场景
6.1 自动化代码注释
- 扫描项目中的代码
- 识别函数和类
- 生成 JSDoc 风格的注释
6.2 项目健康度检查
- 检查依赖是否过期
- 检查是否有安全漏洞
- 检查代码复杂度
6.3 批量重命名和移动
- 根据规则批量重命名文件
- 自动整理项目结构
- 批量移动文件到对应目录
七、注意事项与最佳实践
7.1 常见坑
- 目录权限:确保 MCP 有权限访问项目目录
- 大文件处理:对于超大文件,可能需要分批处理
- 编码问题:注意文件的字符编码,建议统一使用 UTF-8
7.2 安全建议
- 敏感目录:不要将 MCP 配置为可以访问��统敏感目录
- 只读操作:大部分场景使用只读模式即可
- 操作日志:记录文件操作日志,便于审计
总结
通过 Filesystem MCP,我们成功将 项目文档整理从 2 天缩短到 30 分钟,效率提升了 60+ 倍。
更重要的是,AI 可以理解代码语义,不仅能生成文档,还能帮你发现代码中的问题。
如果你也有类似的文件管理需求,不妨试试 Filesystem MCP。