这个文件系统服务器工具提供了一系列用于管理文件和目录的操作。它支持多种功能,包括列出文件内容、读取文件、搜索文件、编辑文件以及列出允许访问的目录等,能有效提升文件管理效率。
此文件系统服务器工具可在Linux、macOS和Windows系统上运行,下面为你详细介绍在不同系统上的安装和运行步骤。
# 先下载可执行文件
wget https://example.com/fs-mcp-server_linux
# 给予执行权限
chmod +x fs-mcp-server_linux
# 运行服务器
./fs-mcp-server_linux
# 下载并解压
tar -xvf fs-mcp-server_macos.tar.gz
# 运行服务器
./fs-mcp-server_macos
# 下载可执行文件
# 双击文件运行
在服务器启动前,需要配置允许访问的目录。可以通过以下命令列出允许访问的目录:
# 列出允许访问的目录
./fs-mcp-server_linux --list-allowed-dirs
# 添加新的允许访问目录
./fs-mcp-server_linux --add-allowed-dir /path/to/directory
# 除不再需要的目录
./fs-mcp-server_linux --remove-allowed-dir /path/to/directory
以下是一个使用Rust语言的客户端调用服务器工具的示例:
use mcp_client::{ClientBuilder, transport::StdioTransport};
use serde_json::json;
#[tokio::main]
async fn main() -> Result<()> {
// 服务器可执行文件路径
let server_path = "path/to/fs-mcp-server";
// 创建并连接到服务器
let (transport, mut receiver) = StdioTransport::new(server_path, vec![]);
let client = ClientBuilder::new("fs-client", "0.1.0")
.with_transport(transport)
.build()?;
// 启动消息处理
let client_for_handler = client.clone();
tokio::spawn(async move {
while let Some(message) = receiver.recv().await {
if let Err(e) = client_for_handler.handle_message(message).await {
eprintln!("处理消息时出错: {}", e);
}
}
});
// 初始化客户端
let init_result = client.initialize().await?;
println!("连接到服务器:{} v{}", init_result.server_info.name, init_result.server_info.version);
// 列出所有允许访问的目录
let allowed_dirs_result = client.call_tool("list_allowed_dirs", &json!({})).await?;
println!("允许访问的目录: {:?}", allowed_dirs_result);
// 列出指定目录的内容
let list_dir_result = client.call_tool("list_dir", &json!({"path": "/your/directory/path"})).await?;
println!("目录内容: {:?}", list_dir_result);
// 读取文件内容
let read_file_result = client.call_tool("read_file", &json!({"file_path": "/path/to/file.txt"})).await?;
println!("文件内容: {}", String::from_utf8(read_file_result).unwrap());
// 搜索文件
let search_result = client.call_tool("search_files", &json!({
"pattern": "*.txt",
"directories": ["/path/to/search"]
})).await?;
println!("搜索结果: {:?}", search_result);
// 编辑文件内容
let edit_file_result = client.call_tool("edit_file", &json!({
"file_path": "/path/to/file.txt",
"content": "新的文件内容"
})).await?;
println!("编辑文件完成: {}", edit_file_result);
Ok(())
}
fn list_allowed_dirs() -> Vec<String> {
// 读取配置文件,获取允许访问的目录列表
let config = read_config();
config.allowed_dirs.clone()
}
fn read_file(file_path: &str) -> Option<Vec<u8>> {
match fs::read(file_path) {
Ok(content) => Some(content),
Err(e) => {
eprintln!("无法读取文件:{}", e);
None
}
}
}
fn search_files(pattern: &str, directories: Vec<&str>) -> Vec<String> {
let mut results = Vec::new();
for dir in directories {
if Path::exists(dir) && Path::is_dir(dir) {
for entry in fs::read_dir(dir).unwrap() {
let entry_path = entry.path().to_str().unwrap();
if entry_path.ends_with(pattern) {
results.push(entry_path.to_string());
}
}
}
}
results
}
fn edit_file(file_path: &str, content: String) -> bool {
match fs::write(file_path, content) {
Ok(_) => true,
Err(e) => {
eprintln!("无法写入文件:{}", e);
false
}
}
}
.
├── README.md # 项目说明文档
├── LICENSE # 许可证文件
├── Cargo.toml # Rust项目的依赖管理文件
├── src/
│ ├── main.rs # 服务器入口程序
│ └── lib.rs # 核心功能实现
└── scripts/ # 脚本目录,包含各种工具脚本
# 克隆项目仓库
git clone https://github.com/your-username/fs-mcp-server.git
# 进入项目目录
cd fs-mcp-server
# 使用Rust构建
cargo build --release
# 克隆项目仓库
git clone https://github.com/your-username/fs-mcp-server.git
# 进入项目目录
cd fs-mcp-server
# 使用Rust构建
cargo build --release
# 设置 Rust 环境变量
# 克隆项目仓库并进入目录后运行
cargo build --release
本项目使用MIT许可证,具体条款请查看LICENSE
文件。
欢迎社区贡献!如果有任何问题或建议,请提交Issues到GitHub仓库。