feishu-mcp
Version:
Model Context Protocol server for Feishu integration
63 lines (62 loc) • 2.53 kB
JavaScript
import { Logger } from '../../utils/logger.js';
import { FeishuBaseApiService } from './FeishuBaseApiService.js';
/**
* 飞书云盘(Drive)服务
* 负责文件夹的查询与创建
*/
export class FeishuDriveService extends FeishuBaseApiService {
constructor(authService) {
super(authService);
}
/**
* 获取当前用户根文件夹的元数据信息
* @returns 根文件夹信息,包含 token(文件夹 Token)、id 和 user_id 字段
*/
async getRootFolderInfo() {
try {
const response = await this.get('/drive/explorer/v2/root_folder/meta');
Logger.debug('获取根文件夹信息成功:', response);
return response;
}
catch (error) {
this.handleApiError(error, '获取飞书根文件夹信息失败');
}
}
/**
* 获取指定文件夹内的文件和子文件夹列表
* @param folderToken 目标文件夹的 Token
* @param orderBy 排序字段,可选 'EditedTime'(编辑时间)、'CreatedTime'(创建时间)等,默认 'EditedTime'
* @param direction 排序方向,'ASC' 升序 / 'DESC' 降序,默认 'DESC'
* @returns 文件夹文件清单,包含 files 数组,每项含文件名、类型、token 等信息
*/
async getFolderFileList(folderToken, orderBy = 'EditedTime', direction = 'DESC') {
try {
const response = await this.get('/drive/v1/files', {
folder_token: folderToken,
order_by: orderBy,
direction
});
Logger.debug(`获取文件夹(${folderToken})中的文件清单成功,文件数量: ${response.files?.length || 0}`);
return response;
}
catch (error) {
this.handleApiError(error, '获取文件夹中的文件清单失败');
}
}
/**
* 在指定文件夹下创建子文件夹
* @param folderToken 父文件夹的 Token
* @param name 新文件夹的名称
* @returns 创建结果,包含新文件夹的 token 和访问 url
*/
async createFolder(folderToken, name) {
try {
const response = await this.post('/drive/v1/files/create_folder', { folder_token: folderToken, name });
Logger.debug(`文件夹创建成功, token: ${response.token}, url: ${response.url}`);
return response;
}
catch (error) {
this.handleApiError(error, '创建文件夹失败');
}
}
}