UNPKG

feishu-mcp

Version:

Model Context Protocol server for Feishu integration

63 lines (62 loc) 2.53 kB
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, '创建文件夹失败'); } } }