gogcli-mcp-slides 2.5.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "Extended Google Slides for Claude via gogcli — auth + full Slides support (create, edit, export, templates, markdown)",
10
- "version": "2.5.0"
10
+ "version": "2.6.0"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "gogcli (Slides)",
16
16
  "source": "./",
17
17
  "description": "Extended Google Slides for Claude via gogcli — auth + full Slides support (create, edit, export, templates, markdown)",
18
- "version": "2.5.0",
18
+ "version": "2.6.0",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gogcli-mcp-slides",
3
3
  "displayName": "gogcli (Slides)",
4
- "version": "2.5.0",
4
+ "version": "2.6.0",
5
5
  "description": "Extended Google Slides for Claude via gogcli — auth + full Slides support (create, edit, export, templates, markdown)",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/dist/index.js CHANGED
@@ -31321,7 +31321,7 @@ function registerSlidesTools(server2) {
31321
31321
  }
31322
31322
 
31323
31323
  // ../gogcli-mcp/src/server.ts
31324
- var VERSION = true ? "2.5.0" : "0.0.0";
31324
+ var VERSION = true ? "2.6.0" : "0.0.0";
31325
31325
  function createServer(options) {
31326
31326
  return new McpServer({
31327
31327
  name: options?.name ?? "gogcli",
@@ -31389,6 +31389,27 @@ function registerExtraSlidesTools(server2) {
31389
31389
  if (before) args.push(`--before=${before}`);
31390
31390
  return runOrDiagnose(args, { account });
31391
31391
  });
31392
+ server2.registerTool("gog_slides_insert_image", {
31393
+ description: "Place a local image on an existing slide at a given size and position. Unlike gog_slides_add_slide (which creates a new full-bleed image slide), this inserts the image onto a slide you already have. width is required; omit height to keep the image's aspect ratio.",
31394
+ inputSchema: {
31395
+ presentationId: external_exports.string().describe("Presentation ID"),
31396
+ slideId: external_exports.string().describe("Slide ID (object ID of the target slide)"),
31397
+ image: external_exports.string().describe("Path to the local image file"),
31398
+ width: external_exports.number().describe("Image width, in unit"),
31399
+ height: external_exports.number().optional().describe("Image height, in unit; omit to keep the image's aspect ratio"),
31400
+ x: external_exports.number().optional().describe("Left position of the image, in unit"),
31401
+ y: external_exports.number().optional().describe("Top position of the image, in unit"),
31402
+ unit: external_exports.enum(["PT", "EMU"]).optional().describe("Measurement unit for x/y/width/height (default: PT)"),
31403
+ account: accountParam
31404
+ }
31405
+ }, async ({ presentationId, slideId, image, width, height, x, y, unit, account }) => {
31406
+ const args = ["slides", "insert-image", presentationId, slideId, image, `--width=${width}`];
31407
+ if (height !== void 0) args.push(`--height=${height}`);
31408
+ if (x !== void 0) args.push(`--x=${x}`);
31409
+ if (y !== void 0) args.push(`--y=${y}`);
31410
+ if (unit) args.push(`--unit=${unit}`);
31411
+ return runOrDiagnose(args, { account });
31412
+ });
31392
31413
  server2.registerTool("gog_slides_delete_slide", {
31393
31414
  description: "Delete a slide from a Google Slides presentation.",
31394
31415
  annotations: { destructiveHint: true },
package/manifest.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "manifest_version": "0.3",
4
4
  "name": "gogcli-mcp-slides",
5
5
  "display_name": "gogcli (Slides)",
6
- "version": "2.5.0",
6
+ "version": "2.6.0",
7
7
  "description": "Extended Google Slides for Claude via gogcli — auth + full Slides support (create, edit, export, templates, markdown)",
8
8
  "author": {
9
9
  "name": "Chris Hall",
@@ -105,6 +105,10 @@
105
105
  "name": "gog_slides_add_slide",
106
106
  "description": "Add a slide from a local image"
107
107
  },
108
+ {
109
+ "name": "gog_slides_insert_image",
110
+ "description": "Place a sized, positioned local image on an existing slide"
111
+ },
108
112
  {
109
113
  "name": "gog_slides_list_slides",
110
114
  "description": "List slides in a presentation"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gogcli-mcp-slides",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "mcpName": "io.github.chrischall/gogcli-mcp-slides",
5
5
  "description": "Extended Google Slides MCP server via gogcli — auth + full Slides support",
6
6
  "author": "Claude Code (AI) <https://www.anthropic.com/claude>",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "source": "github",
8
8
  "subfolder": "packages/gogcli-mcp-slides"
9
9
  },
10
- "version": "2.5.0",
10
+ "version": "2.6.0",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "gogcli-mcp-slides",
15
- "version": "2.5.0",
15
+ "version": "2.6.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -64,6 +64,28 @@ export function registerExtraSlidesTools(server: McpServer): void {
64
64
  return runOrDiagnose(args, { account });
65
65
  });
66
66
 
67
+ server.registerTool('gog_slides_insert_image', {
68
+ description: 'Place a local image on an existing slide at a given size and position. Unlike gog_slides_add_slide (which creates a new full-bleed image slide), this inserts the image onto a slide you already have. width is required; omit height to keep the image\'s aspect ratio.',
69
+ inputSchema: {
70
+ presentationId: z.string().describe('Presentation ID'),
71
+ slideId: z.string().describe('Slide ID (object ID of the target slide)'),
72
+ image: z.string().describe('Path to the local image file'),
73
+ width: z.number().describe('Image width, in unit'),
74
+ height: z.number().optional().describe('Image height, in unit; omit to keep the image\'s aspect ratio'),
75
+ x: z.number().optional().describe('Left position of the image, in unit'),
76
+ y: z.number().optional().describe('Top position of the image, in unit'),
77
+ unit: z.enum(['PT', 'EMU']).optional().describe('Measurement unit for x/y/width/height (default: PT)'),
78
+ account: accountParam,
79
+ },
80
+ }, async ({ presentationId, slideId, image, width, height, x, y, unit, account }) => {
81
+ const args = ['slides', 'insert-image', presentationId, slideId, image, `--width=${width}`];
82
+ if (height !== undefined) args.push(`--height=${height}`);
83
+ if (x !== undefined) args.push(`--x=${x}`);
84
+ if (y !== undefined) args.push(`--y=${y}`);
85
+ if (unit) args.push(`--unit=${unit}`);
86
+ return runOrDiagnose(args, { account });
87
+ });
88
+
67
89
  server.registerTool('gog_slides_delete_slide', {
68
90
  description: 'Delete a slide from a Google Slides presentation.',
69
91
  annotations: { destructiveHint: true },
@@ -218,3 +218,26 @@ describe('gog_slides_replace_slide', () => {
218
218
  );
219
219
  });
220
220
  });
221
+
222
+ // gog 0.23.0
223
+ describe('gog_slides_insert_image', () => {
224
+ it('inserts an image with the required width', async () => {
225
+ await handlers.get('gog_slides_insert_image')!({
226
+ presentationId: 'p1', slideId: 's1', image: '/tmp/i.png', width: 200,
227
+ });
228
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
229
+ ['slides', 'insert-image', 'p1', 's1', '/tmp/i.png', '--width=200'],
230
+ { account: undefined },
231
+ );
232
+ });
233
+
234
+ it('passes height, position and unit', async () => {
235
+ await handlers.get('gog_slides_insert_image')!({
236
+ presentationId: 'p1', slideId: 's1', image: '/tmp/i.png', width: 200, height: 100, x: 50, y: 60, unit: 'PT', account: 'a@b.com',
237
+ });
238
+ expect(lib.runOrDiagnose).toHaveBeenCalledWith(
239
+ ['slides', 'insert-image', 'p1', 's1', '/tmp/i.png', '--width=200', '--height=100', '--x=50', '--y=60', '--unit=PT'],
240
+ { account: 'a@b.com' },
241
+ );
242
+ });
243
+ });