claude-code-skill-power/filesystem-mcp-server/README.md

267 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FileSystem MCP Server
一个基于 Model Context Protocol (MCP) 的文件系统服务器,提供与本地文件系统交互的工具。
## 概述
FileSystem MCP Server 是一个 Node.js/TypeScript 实现的服务端应用,通过 MCP 协议使 AI 模型能够安全地读取、浏览和搜索本地文件系统。该服务器提供三个核心工具:`read_file`、`list_directory` 和 `search_files`,支持多种输出格式和输入验证。
## 功能特性
- **安全文件读取** - 支持指定编码、行范围和字符限制的文本读取
- **目录内容浏览** - 列出目录中的文件和子目录,包含元数据
- **模式匹配搜索** - 使用 glob 模式递归搜索文件
- **双传输模式** - 支持 stdio本地和 HTTP远程两种传输方式
- **类型安全** - 完整的 TypeScript 类型定义和 Zod 输入验证
## 系统要求
- Node.js >= 18
- npm 或 yarn
## 快速开始
### 安装
```bash
cd filesystem-mcp-server
npm install
```
### 构建
```bash
npm run build
```
### 运行
**stdio 模式(默认,本地集成)**
```bash
npm start
```
**HTTP 模式(远程访问)**
```bash
TRANSPORT=http npm start
```
**开发模式(热重载)**
```bash
npm run dev
```
HTTP 模式默认监听 3000 端口,可通过 `PORT` 环境变量指定其他端口:
```bash
PORT=8080 TRANSPORT=http npm start
```
## 工具说明
### read_file
读取指定路径的文件内容。
**参数**
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|------|------|------|--------|------|
| `path` | string | 是 | - | 文件的绝对路径 |
| `encoding` | string | 否 | `utf-8` | 文件编码 |
| `max_chars` | number | 否 | - | 返回的最大字符数 |
| `line_start` | number | 否 | - | 起始行号1-based |
| `line_end` | number | 否 | - | 结束行号1-based |
| `response_format` | string | 否 | `markdown` | 输出格式:`markdown` 或 `json` |
**示例**
```json
{
"path": "/path/to/config.json",
"encoding": "utf-8",
"line_start": 1,
"line_end": 100,
"response_format": "markdown"
}
```
**输出格式**
- Markdown人类可读的格式化输出包含文件信息和代码块
- JSON包含完整元数据的结构化数据
---
### list_directory
列出指定目录的内容。
**参数**
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|------|------|------|--------|------|
| `path` | string | 是 | - | 目录的绝对路径 |
| `response_format` | string | 否 | `markdown` | 输出格式:`markdown` 或 `json` |
**示例**
```json
{
"path": "/path/to/project",
"response_format": "markdown"
}
```
**输出格式**
- Markdown人类可读的目录结构使用图标标识文件和目录
- JSON包含文件和目录详细信息的结构化数据
---
### search_files
使用 glob 模式在目录中搜索文件。
**参数**
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|------|------|------|--------|------|
| `path` | string | 是 | - | 搜索起始目录的绝对路径 |
| `pattern` | string | 是 | - | glob 模式(如 `*.ts`、`**/*.json` |
| `max_results` | number | 否 | 50 | 返回的最大结果数(最大 100 |
| `include_content` | boolean | 否 | `false` | 是否在结果中包含文件内容 |
| `response_format` | string | 否 | `markdown` | 输出格式:`markdown` 或 `json` |
**模式示例**
| 模式 | 匹配 |
|------|------|
| `*.ts` | 当前目录下的所有 TypeScript 文件 |
| `**/*.json` | 任意目录下的所有 JSON 文件 |
| `src/**/*.ts` | src 目录下的所有 TypeScript 文件 |
| `*.{js,ts}` | 当前目录下的所有 JS 和 TS 文件 |
**示例**
```json
{
"path": "/path/to/project",
"pattern": "**/*.ts",
"max_results": 50,
"include_content": false,
"response_format": "json"
}
```
**输出格式**
- Markdown人类可读的搜索结果列表
- JSON包含所有匹配文件详细信息的结构化数据
## 环境变量
| 变量 | 值 | 说明 |
|------|-----|------|
| `TRANSPORT` | `stdio``http` | 传输协议,默认 `stdio` |
| `PORT` | 端口号 | HTTP 模式监听的端口,默认 `3000` |
## 在 MCP 客户端中使用
### Claude Desktop 配置
在 Claude Desktop 的配置文件中添加:
```json
{
"mcpServers": {
"filesystem": {
"command": "node",
"args": ["/path/to/filesystem-mcp-server/dist/index.js"],
"disabled": false,
"env": {}
}
}
}
```
### 环境变量配置
如需使用 HTTP 模式:
```json
{
"mcpServers": {
"filesystem": {
"command": "node",
"args": ["/path/to/filesystem-mcp-server/dist/index.js"],
"disabled": false,
"env": {
"TRANSPORT": "http",
"PORT": "3000"
}
}
}
}
```
## 项目结构
```
filesystem-mcp-server/
├── package.json # 项目配置和依赖
├── tsconfig.json # TypeScript 编译配置
├── README.md # 项目文档
├── src/
│ ├── index.ts # 服务器入口点
│ ├── types.ts # TypeScript 类型定义
│ ├── constants.ts # 常量配置
│ └── tools/
│ ├── index.ts # 工具注册
│ ├── read-file.ts # 读取文件工具实现
│ ├── list-directory.ts # 目录列表工具实现
│ └── search-files.ts # 文件搜索工具实现
└── dist/ # 编译输出
```
## 开发
### 可用脚本
```bash
# 构建项目
npm run build
# 开发模式(热重载)
npm run dev
# 清理构建产物
npm run clean
```
### 添加新工具
1.`src/tools/` 目录中创建新的工具文件
2. 使用 `server.registerTool()` 注册工具
3.`src/tools/index.ts` 中导出工具注册函数
## 错误处理
所有工具都提供清晰的错误信息:
| 错误类型 | 错误信息 |
|---------|---------|
| 文件不存在 | `Error: File not found: <path>` |
| 目录不存在 | `Error: Directory not found: <path>` |
| 权限被拒 | `Error: Permission denied to <operation>: <path>` |
| 路径是文件 | `Error: Path is a file, not a directory: <path>` |
| 路径是目录 | `Error: Path is a directory, not a file: <path>` |
## 许可证
MIT License