Spaces:
Sleeping
Sleeping
| import type { FastMCP } from 'fastmcp'; | |
| import { UserError } from 'fastmcp'; | |
| import { z } from 'zod'; | |
| import { getDriveClient } from '../../clients.js'; | |
| export function register(server: FastMCP) { | |
| server.addTool({ | |
| name: 'getFolderInfo', | |
| description: | |
| 'Gets metadata about a Drive folder including its name, owner, sharing status, and parent folder.', | |
| parameters: z.strictObject({ | |
| folderId: z.string().describe('ID of the folder to get information about.'), | |
| }), | |
| execute: async (args, { log }) => { | |
| const drive = await getDriveClient(); | |
| log.info(`Getting folder info: ${args.folderId}`); | |
| try { | |
| const response = await drive.files.get({ | |
| fileId: args.folderId, | |
| fields: | |
| 'id,name,description,createdTime,modifiedTime,webViewLink,owners(displayName,emailAddress),lastModifyingUser(displayName),shared,parents', | |
| supportsAllDrives: true, | |
| }); | |
| const file = response.data; | |
| if (file.mimeType !== 'application/vnd.google-apps.folder') { | |
| throw new UserError('The specified ID does not belong to a folder.'); | |
| } | |
| const info = { | |
| id: file.id, | |
| name: file.name, | |
| createdTime: file.createdTime, | |
| modifiedTime: file.modifiedTime, | |
| owner: file.owners?.[0]?.displayName || null, | |
| lastModifyingUser: file.lastModifyingUser?.displayName || null, | |
| shared: file.shared || false, | |
| url: file.webViewLink, | |
| description: file.description || null, | |
| parentFolderId: file.parents?.[0] || null, | |
| }; | |
| return JSON.stringify(info, null, 2); | |
| } catch (error: any) { | |
| log.error(`Error getting folder info: ${error.message || error}`); | |
| if (error.code === 404) throw new UserError(`Folder not found (ID: ${args.folderId}).`); | |
| if (error.code === 403) | |
| throw new UserError('Permission denied. Make sure you have access to this folder.'); | |
| throw new UserError(`Failed to get folder info: ${error.message || 'Unknown error'}`); | |
| } | |
| }, | |
| }); | |
| } | |