这是一个提供增强文件操作能力的Model Context Protocol (MCP)服务器,支持流式传输、补丁更新和变更追踪。
<a href="https://glama.ai/mcp/servers/7b750si00d"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=3340691174,1360263328&fm=3081&app=3081&f=PNG?w=760&h=400" alt="文件操作服务器MCP服务器" /> </a>要通过Smithery自动安装文件操作服务器到Claude桌面:
npx -y @smithery/cli install @bsmi021/mcp-file-operations-server --client claude
npm install
参见DOCKER.md,了解包括Windows和Linux本地驱动挂载在内的综合Docker设置指南。
快速Docker启动:
# Stdio传输(适用于MCP客户端)
docker run -it --rm -v "$(pwd):/workspace" ghcr.io/bsmi021/mcp-file-operations-server
# HTTP传输(适用于web/远程访问)
docker run -it --rm -p 3001:3001 -v "$(pwd):/workspace" -e MCP_TRANSPORT=http ghcr.io/bsmi021/mcp-file-operations-server
服务器支持两种传输模式:
用于与Claude桌面等MCP客户端直接集成:
npm start
用于远程连接和web应用:
npm run start:http
HTTP服务器提供:
GET http://localhost:3001/sse - 建立流式连接POST http://localhost:3001/messages - 接收客户端消息GET http://localhost:3001/health - 服务器状态GET http://localhost:3001/sessions - 活跃连接信息# Stdio传输带自动重载
npm run dev
# HTTP传输带自动重载
npm run dev:http
# Stdio传输
npm start
# HTTP传输
npm run start:http
# 自定义HTTP端口
npm run start:http -- --port 8080
copy_file:将文件复制到新位置read_file:从文件中读取内容write_file:向文件写入内容move_file:移动/重命名文件delete_file:删除文件append_file:追加内容到文件make_directory:创建目录remove_directory:移除目录copy_directory:递归复制目录(带进度报告)watch_directory:开始监控目录变化unwatch_directory:停止监控目录get_changes:获取记录的变更列表clear_changes:清除所有记录的变更file:///recent-changes:最近的文件系统变更列表file://{path}:访问文件内容metadata://{path}:访问文件元数据directory://{path}:列出目录内容// 复制文件
await fileOperations.copyFile({
source: 'source.txt',
destination: 'destination.txt',
overwrite: false
});
// 监控目录
await fileOperations.watchDirectory({
path: './watched-dir',
recursive: true
});
// 通过资源访问文件内容
const resource = await mcp.readResource('file:///path/to/file.txt');
console.log(resource.contents[0].text);
// 带进度报告的目录复制
const result = await fileOperations.copyDirectory({
source: './source-dir',
destination: './dest-dir',
overwrite: false
});
// 结果中的进度令牌可用于跟踪进度
console.log(result.progressToken);
通过JavaScript连接:
// 建立SSE连接
const eventSource = new EventSource('http://localhost:3001/sse');
let sessionId = null;
eventSource.onopen = function() {
console.log('已连接到MCP服务器');
};
eventSource.onmessage = function(event) {
const message = JSON.parse(event.data);
// 从第一条消息中提取会话ID
if (!sessionId && message.sessionId) {
sessionId = message.sessionId;
}
console.log('收到:', message);
};
// 向服务器发送消息
async function sendMessage(method, params) {
const message = {
jsonrpc: '2.0',
id: Date.now(),
method: method,
params: params
};
const response = await fetch('http://localhost:3001/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Session-ID': sessionId
},
body: JSON.stringify(message)
});
return response.json();
}
// 示例:列出工具
sendMessage('tools/list', {});
// 示例:读取文件
sendMessage('tools/call', {
name: 'read_file',
arguments: { path: '/workspace/example.txt' }
});
使用curl进行测试:
# 在后台启动SSE连接
curl -N http://localhost:3001/sse &
# 检查服务器健康状况
curl http://localhost:3001/health
# 列出活跃会话
curl http://localhost:3001/sessions
交互式Web客户端:
一个完整的交互示例在examples/http-client.html中可用。在浏览器中打开此文件以使用用户友好的GUI测试HTTP接口。
# 构建镜像
docker build -t mcp-file-operations-server .
# 运行带stdio(适用于MCP客户端)
docker run -it --rm -v "$(pwd):/workspace" mcp-file-operations-server
# 运行带HTTP接口
docker run -it --rm -p 3001:3001 -v "$(pwd):/workspace" -e MCP_TRANSPORT=http mcp-file-operations-server
Windows:
docker run -it --rm -v "C:\MyProject:/workspace" -p 3001:3001 -e MCP_TRANSPORT=http mcp-file-operations-server
Linux/macOS:
docker run -it --rm -v "/home/user/project:/workspace" -p 3001:3001 -e MCP_TRANSPORT=http mcp-file-operations-server
对于包括Windows和Linux本地驱动挂载在内的综合Docker设置指南,请参见DOCKER.md。
服务器实现速率限制以防止滥用:
速率限制错误包含错误消息中的重试时间。
所有文件路径都经过验证,以防止目录遍历攻击:
../)长时间操作如目录复制提供进度更新:
interface ProgressUpdate {
token: string | number;
message: string;
percentage: number;
}
可以通过操作结果返回的进度令牌来跟踪进度。
npm run build
npm run lint
npm run format
npm test
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_TRANSPORT | stdio | 传输模式:stdio或http |
MCP_HTTP_PORT | 3001 | HTTP传输端口 |
服务器可以通过各种设置进行配置:
服务器通过FileOperationError类和MCP错误码提供详细的错误信息:
InvalidRequest:无效参数或请求格式MethodNotFound:未知的工具或资源请求InvalidParams:无效参数(例如,路径验证失败)InternalError:服务器端错误每个错误包括:
git checkout -b feature/amazing-feature)git commit -m '添加惊人的功能')git push origin feature/amazing-feature)本项目根据MIT许可证发布 - 详情见LICENSE文件。