keynote_get_presentation_info
Retrieve metadata for an open presentation, including slide count, master slide names, and file path. Use this to identify available master slides before redesigning slides.
Instructions
Get metadata for an open presentation: slide count, available master slide names, and file path. Call this first to understand what masters are available before redesigning.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| doc_index | No | Document index (0-based). Defaults to 0 (frontmost). |
Implementation Reference
- src/keynote-jxa.ts:256-270 (handler)The actual JXA (JavaScript for Automation) handler that executes 'get_presentation_info'. It retrieves the document, enumerates master slides, and returns name, slideCount, masterSlides, filePath, and modified status.
case 'get_presentation_info': { var doc = getDoc(app, payload.doc_index); var masters = []; var ms = safeCall(function() { return doc.masterSlides(); }, []); for (var i = 0; i < ms.length; i++) { masters.push(safeCall(function() { return ms[i].name(); }, 'Unnamed')); } return { name: safeCall(function() { return doc.name(); }, 'Untitled'), slideCount: safeCall(function() { return doc.slides.length; }, 0), masterSlides: masters, filePath: safeCall(function() { return doc.file.posixPath(); }, ''), modified: safeCall(function() { return doc.modified(); }, false) }; } - src/keynote-tooling.ts:32-41 (schema)Tool definition/schema for 'keynote_get_presentation_info', declaring the input schema with an optional doc_index field.
{ name: 'keynote_get_presentation_info', description: 'Get metadata for an open presentation: slide count, available master slide names, and file path. Call this first to understand what masters are available before redesigning.', inputSchema: { type: 'object', properties: { doc_index: ELEMENT_FIELDS.doc_index, }, }, }, - src/index.ts:95-100 (registration)Registration in the MCP server handler: maps the tool name 'keynote_get_presentation_info' to bridge.execute('get_presentation_info', ...) with optional doc_index.
case 'keynote_get_presentation_info': { const result = await bridge.execute('get_presentation_info', { doc_index: optionalNumber(args.doc_index), }); return jsonResult(result); } - src/keynote.ts:58-89 (helper)KeynoteBridge.execute() method that spawns osascript with the JXA script, passing the operation name and payload via environment variables.
export class KeynoteBridge { async execute<T>( operation: string, payload: Record<string, unknown>, options?: { timeoutMs?: number }, ): Promise<T> { const { stdout, stderr, exitCode } = await this.runJxa( operation, payload, options?.timeoutMs, ); return parseJxaEnvelope<T>(stdout, stderr, exitCode, 'Keynote'); } private runJxa( operation: string, payload: Record<string, unknown>, timeoutMs = 120_000, ): Promise<{ stdout: string; stderr: string; exitCode: number | null }> { return new Promise((resolve, reject) => { const child = spawn('osascript', ['-l', 'JavaScript'], { env: { ...process.env, KEYNOTE_OPERATION: operation, KEYNOTE_PAYLOAD: JSON.stringify(payload ?? {}), }, }); let stdout = ''; let stderr = ''; let settled = false;