UNPKG

feishu-mcp

Version:

Model Context Protocol server for Feishu integration

87 lines (86 loc) 4.46 kB
import { formatErrorMessage } from '../../utils/error.js'; import { Logger } from '../../utils/logger.js'; import { FolderTokenSchema, FolderNameSchema, OrderBySchema, DirectionSchema } from '../../types/feishuSchema.js'; /** * 注册飞书文件夹相关的MCP工具 * @param server MCP服务器实例 * @param feishuService 飞书API服务实例 */ export function registerFeishuFolderTools(server, feishuService) { // 添加获取根文件夹信息工具 server.tool('get_feishu_root_folder_info', 'Retrieves basic information about the root folder in Feishu Drive. Returns the token, ID and user ID of the root folder, which can be used for subsequent folder operations.', {}, async () => { try { if (!feishuService) { return { content: [{ type: 'text', text: '飞书服务未初始化,请检查配置' }], }; } Logger.info(`开始获取飞书根文件夹信息`); const folderInfo = await feishuService.getRootFolderInfo(); Logger.info(`飞书根文件夹信息获取成功,token: ${folderInfo.token}`); return { content: [{ type: 'text', text: JSON.stringify(folderInfo, null, 2) }], }; } catch (error) { Logger.error(`获取飞书根文件夹信息失败:`, error); const errorMessage = formatErrorMessage(error, '获取飞书根文件夹信息失败'); return { content: [{ type: 'text', text: errorMessage }], }; } }); // 添加获取文件夹中的文件清单工具 server.tool('get_feishu_folder_files', 'Retrieves a list of files and subfolders in a specified folder. Use this to explore folder contents, view file metadata, and get URLs and tokens for further operations.', { folderToken: FolderTokenSchema, orderBy: OrderBySchema, direction: DirectionSchema }, async ({ folderToken, orderBy = 'EditedTime', direction = 'DESC' }) => { try { if (!feishuService) { return { content: [{ type: 'text', text: '飞书服务未初始化,请检查配置' }], }; } Logger.info(`开始获取飞书文件夹中的文件清单,文件夹Token: ${folderToken},排序方式: ${orderBy},排序方向: ${direction}`); const fileList = await feishuService.getFolderFileList(folderToken, orderBy, direction); Logger.info(`飞书文件夹中的文件清单获取成功,共 ${fileList.files?.length || 0} 个文件`); return { content: [{ type: 'text', text: JSON.stringify(fileList, null, 2) }], }; } catch (error) { Logger.error(`获取飞书文件夹中的文件清单失败:`, error); const errorMessage = formatErrorMessage(error); return { content: [{ type: 'text', text: `获取飞书文件夹中的文件清单失败: ${errorMessage}` }], }; } }); // 添加创建文件夹工具 server.tool('create_feishu_folder', 'Creates a new folder in a specified parent folder. Use this to organize documents and files within your Feishu Drive structure. Returns the token and URL of the newly created folder.', { folderToken: FolderTokenSchema, folderName: FolderNameSchema, }, async ({ folderToken, folderName }) => { try { if (!feishuService) { return { content: [{ type: 'text', text: '飞书服务未初始化,请检查配置' }], }; } Logger.info(`开始创建飞书文件夹,父文件夹Token: ${folderToken},文件夹名称: ${folderName}`); const result = await feishuService.createFolder(folderToken, folderName); Logger.info(`飞书文件夹创建成功,token: ${result.token},URL: ${result.url}`); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], }; } catch (error) { Logger.error(`创建飞书文件夹失败:`, error); const errorMessage = formatErrorMessage(error); return { content: [{ type: 'text', text: `创建飞书文件夹失败: ${errorMessage}` }], }; } }); }