// Folder management MCP tools
import { z } from 'zod';
import type { DriveService } from '../services/drive.js';
// ─────────────────────────────────────────────────────────────────────────────
// SCHEMAS
// ─────────────────────────────────────────────────────────────────────────────
export const CreateFolderSchema = z.object({
name: z.string().describe('Folder name'),
parent: z.string().optional().describe('Parent folder ID or path'),
});
export const ListFolderSchema = z.object({
folder: z.string().optional().describe('Folder ID or path to list (default: root)'),
pageSize: z.number().optional().default(100).describe('Number of results'),
pageToken: z.string().optional().describe('Token for pagination'),
});
// ─────────────────────────────────────────────────────────────────────────────
// TOOL DEFINITIONS
// ─────────────────────────────────────────────────────────────────────────────
export const folderTools = [
{
name: 'createFolder',
description: 'Create a new folder in Google Drive',
inputSchema: {
type: 'object' as const,
properties: {
name: { type: 'string', description: 'Folder name' },
parent: { type: 'string', description: 'Parent folder ID or path' },
},
required: ['name'],
},
},
{
name: 'listFolder',
description: 'List contents of a folder in Google Drive',
inputSchema: {
type: 'object' as const,
properties: {
folder: { type: 'string', description: 'Folder ID or path (default: root)' },
pageSize: { type: 'number', description: 'Number of results' },
pageToken: { type: 'string', description: 'Token for pagination' },
},
required: [],
},
},
];
// ─────────────────────────────────────────────────────────────────────────────
// HANDLERS
// ─────────────────────────────────────────────────────────────────────────────
export function createFolderHandlers(driveService: DriveService) {
return {
createFolder: async (args: z.infer<typeof CreateFolderSchema>) => {
const params = CreateFolderSchema.parse(args);
return driveService.createFolder(params.name, params.parent);
},
listFolder: async (args: z.infer<typeof ListFolderSchema>) => {
const params = ListFolderSchema.parse(args);
return driveService.listFolder(params.folder || 'root', params.pageSize, params.pageToken);
},
};
}