@bohachu/google-slides-mcp
Version:
MCP server for Google Slides integration with service account authentication
64 lines (63 loc) • 3.92 kB
JavaScript
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'),
});