UNPKG

@bohachu/google-slides-mcp

Version:

MCP server for Google Slides integration with service account authentication

64 lines (63 loc) 3.92 kB
import { z } from 'zod'; export const CreatePresentationArgsSchema = z.object({ title: z.string().min(1, { message: '"title" (string) is required.' }), }); export const GetPresentationArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), fields: z.string().optional(), }); // Using z.any() for complex Google Slides API structures for simplicity in this context. // For stricter typing, these could be defined more precisely based on the Google Slides API. const GoogleSlidesRequestSchema = z.any(); const GoogleSlidesWriteControlSchema = z.any(); export const BatchUpdatePresentationArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), requests: z.array(GoogleSlidesRequestSchema).min(1, { message: '"requests" (array) is required.' }), writeControl: GoogleSlidesWriteControlSchema.optional(), }); export const GetPageArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), pageObjectId: z.string().min(1, { message: '"pageObjectId" (string) is required.' }), }); export const SummarizePresentationArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), include_notes: z.boolean().optional(), }); export const movePresentationSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), folderId: z.string().min(1, { message: '"folderId" (string) is required.' }), copyInstead: z.boolean().optional().describe('If true, creates a copy in the target folder instead of moving'), newName: z.string().optional().describe('New name for the presentation (only used when copyInstead is true)'), }); export const GetSlidesArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), startIndex: z.number().min(0).optional().describe('The starting slide index (0-based, inclusive)'), endIndex: z.number().min(0).optional().describe('The ending slide index (0-based, exclusive)'), }); export const GetSlidePreviewArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), slideId: z.string().min(1, { message: '"slideId" (string) is required.' }), mimeType: z.enum(['PNG', 'JPEG']).optional().describe('The MIME type of the thumbnail image. Default: PNG'), }); export const DuplicatePresentationArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), newTitle: z.string().min(1, { message: '"newTitle" (string) is required.' }), }); export const GetSlideTextElementsArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), slideId: z.string().min(1, { message: '"slideId" (string) is required.' }), includeStyles: z.boolean().optional().describe('Include text formatting information'), includePosition: z.boolean().optional().describe('Include element position/layout info'), }); export const ReplaceTextByElementArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), replacements: z.array(z.object({ elementId: z.string().min(1, { message: '"elementId" (string) is required.' }), newText: z.string(), preserveStyle: z.boolean().optional().describe('Preserve original text style (default: true)'), })).min(1, { message: 'At least one replacement is required.' }), }); export const AnalyzeTemplateStructureArgsSchema = z.object({ presentationId: z.string().min(1, { message: '"presentationId" (string) is required.' }), slideIndices: z.array(z.number()).optional().describe('Specific slides to analyze'), });