Fs Mcp Server

Fs Mcp Server

🚀 文件系统服务器工具文档

这个文件系统服务器工具提供了一系列用于管理文件和目录的操作。它支持多种功能,包括列出文件内容、读取文件、搜索文件、编辑文件以及列出允许访问的目录等,能有效提升文件管理效率。

🚀 快速开始

此文件系统服务器工具可在Linux、macOS和Windows系统上运行,下面为你详细介绍在不同系统上的安装和运行步骤。

Linux系统

# 先下载可执行文件
wget https://example.com/fs-mcp-server_linux

# 给予执行权限
chmod +x fs-mcp-server_linux

# 运行服务器
./fs-mcp-server_linux

macOS系统

# 下载并解压
tar -xvf fs-mcp-server_macos.tar.gz

# 运行服务器
./fs-mcp-server_macos

Windows系统

# 下载可执行文件
# 双击文件运行

✨ 主要特性

  • 跨平台支持:适用于Linux、macOS和Windows。
  • 强大的权限控制:通过配置允许访问的目录,确保操作的安全性。
  • 高效的操作性能:优化了文件操作的速度,适合处理大量数据。
  • 灵活的配置选项:可以通过命令行参数或配置文件自定义行为。

📦 安装指南

配置允许访问的目录

在服务器启动前,需要配置允许访问的目录。可以通过以下命令列出允许访问的目录:

# 列出允许访问的目录
./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/               # 脚本目录,包含各种工具脚本

构建说明

Linux系统

# 克隆项目仓库
git clone https://github.com/your-username/fs-mcp-server.git

# 进入项目目录
cd fs-mcp-server

# 使用Rust构建
cargo build --release

macOS系统

# 克隆项目仓库
git clone https://github.com/your-username/fs-mcp-server.git

# 进入项目目录
cd fs-mcp-server

# 使用Rust构建
cargo build --release

Windows系统

# 设置 Rust 环境变量
# 克隆项目仓库并进入目录后运行
cargo build --release

📄 许可证

本项目使用MIT许可证,具体条款请查看LICENSE文件。

💡 贡献指南

欢迎社区贡献!如果有任何问题或建议,请提交Issues到GitHub仓库。

  • 0 关注
  • 0 收藏,10 浏览
  • system 提出于 2025-09-29 14:51

相似服务问题