google-workspace-mcp 2.1.1 → 2.3.6

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.
Files changed (46) hide show
  1. package/README.md +17 -2
  2. package/dist/accounts.d.ts.map +1 -1
  3. package/dist/accounts.js +1 -0
  4. package/dist/accounts.js.map +1 -1
  5. package/dist/excelHelpers.d.ts +108 -0
  6. package/dist/excelHelpers.d.ts.map +1 -0
  7. package/dist/excelHelpers.js +343 -0
  8. package/dist/excelHelpers.js.map +1 -0
  9. package/dist/securityHelpers.d.ts +118 -0
  10. package/dist/securityHelpers.d.ts.map +1 -0
  11. package/dist/securityHelpers.js +437 -0
  12. package/dist/securityHelpers.js.map +1 -0
  13. package/dist/server.js +22 -6
  14. package/dist/server.js.map +1 -1
  15. package/dist/serverWrapper.d.ts +9 -1
  16. package/dist/serverWrapper.d.ts.map +1 -1
  17. package/dist/serverWrapper.js +76 -7
  18. package/dist/serverWrapper.js.map +1 -1
  19. package/dist/tools/calendar.tools.d.ts.map +1 -1
  20. package/dist/tools/calendar.tools.js +2 -1
  21. package/dist/tools/calendar.tools.js.map +1 -1
  22. package/dist/tools/docs.tools.d.ts.map +1 -1
  23. package/dist/tools/docs.tools.js +29 -10
  24. package/dist/tools/docs.tools.js.map +1 -1
  25. package/dist/tools/drive.tools.d.ts.map +1 -1
  26. package/dist/tools/drive.tools.js +680 -6
  27. package/dist/tools/drive.tools.js.map +1 -1
  28. package/dist/tools/excel.tools.d.ts +3 -0
  29. package/dist/tools/excel.tools.d.ts.map +1 -0
  30. package/dist/tools/excel.tools.js +651 -0
  31. package/dist/tools/excel.tools.js.map +1 -0
  32. package/dist/tools/forms.tools.d.ts.map +1 -1
  33. package/dist/tools/forms.tools.js +13 -7
  34. package/dist/tools/forms.tools.js.map +1 -1
  35. package/dist/tools/gmail.tools.d.ts.map +1 -1
  36. package/dist/tools/gmail.tools.js +376 -37
  37. package/dist/tools/gmail.tools.js.map +1 -1
  38. package/dist/tools/sheets.tools.d.ts.map +1 -1
  39. package/dist/tools/sheets.tools.js +138 -4
  40. package/dist/tools/sheets.tools.js.map +1 -1
  41. package/dist/tools/slides.tools.d.ts.map +1 -1
  42. package/dist/tools/slides.tools.js +3 -1
  43. package/dist/tools/slides.tools.js.map +1 -1
  44. package/dist/types.d.ts +5 -0
  45. package/dist/types.d.ts.map +1 -1
  46. package/package.json +14 -6
@@ -1,13 +1,19 @@
1
1
  import { type FastMCP } from 'fastmcp';
2
2
  import type { FastMCPSessionAuth } from './types.js';
3
+ import { type PathSecurityConfig } from './securityHelpers.js';
3
4
  export interface ServerConfig {
4
5
  /** When true, tools with readOnlyHint: false will be blocked at runtime */
5
6
  readOnly: boolean;
7
+ /** When true, tools that communicate with third parties are blocked */
8
+ noThirdParty: boolean;
9
+ /** Path security configuration for file system operations */
10
+ pathSecurity: PathSecurityConfig;
6
11
  }
7
12
  /**
8
13
  * Wraps a FastMCP server to:
9
14
  * 1. Add global error handling with help links to all tools
10
15
  * 2. Enforce read-only mode based on tool annotations (if enabled)
16
+ * 3. Block third-party communications (if enabled)
11
17
  *
12
18
  * @param server - The FastMCP server instance
13
19
  * @param config - Server configuration
@@ -15,7 +21,9 @@ export interface ServerConfig {
15
21
  */
16
22
  export declare function createServerWithConfig<T extends FastMCPSessionAuth>(server: FastMCP<T>, config: ServerConfig): FastMCP<T>;
17
23
  /**
18
- * Parse server config from environment variables
24
+ * Parse server config from environment variables and optional config file
19
25
  */
20
26
  export declare function getServerConfigFromEnv(): ServerConfig;
27
+ export declare function setServerConfig(config: ServerConfig): void;
28
+ export declare function getServerConfig(): ServerConfig;
21
29
  //# sourceMappingURL=serverWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverWrapper.d.ts","sourceRoot":"","sources":["../src/serverWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAyDD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,EACjE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAIrD"}
1
+ {"version":3,"file":"serverWrapper.d.ts","sourceRoot":"","sources":["../src/serverWrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,YAAY;IAC3B,2EAA2E;IAC3E,QAAQ,EAAE,OAAO,CAAC;IAClB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAC;IACtB,6DAA6D;IAC7D,YAAY,EAAE,kBAAkB,CAAC;CAClC;AA+FD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,EACjE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAiCrD;AAOD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAE1D;AAED,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
@@ -1,7 +1,25 @@
1
+ import { DEFAULT_PATH_SECURITY_CONFIG, checkThirdPartyAction, } from './securityHelpers.js';
1
2
  const HELP_MESSAGE = `
2
3
 
3
4
  For help, see: https://github.com/zueai/google-workspace-mcp#troubleshooting
4
5
  To report an issue: https://github.com/zueai/google-workspace-mcp/issues`;
6
+ /**
7
+ * Maximum characters allowed in a tool response before truncation.
8
+ * Configurable via GOOGLE_MCP_MAX_RESPONSE_CHARS env var.
9
+ */
10
+ const MAX_RESPONSE_CHARS = parseInt(process.env.GOOGLE_MCP_MAX_RESPONSE_CHARS || '100000', 10);
11
+ /**
12
+ * Truncate a tool response string if it exceeds the configured limit.
13
+ */
14
+ function guardResponseSize(response, toolName) {
15
+ if (response.length > MAX_RESPONSE_CHARS) {
16
+ const truncated = response.substring(0, MAX_RESPONSE_CHARS);
17
+ return (truncated +
18
+ `\n\n[...RESPONSE TRUNCATED — tool "${toolName}" returned ${response.length.toLocaleString()} chars, ` +
19
+ `limit is ${MAX_RESPONSE_CHARS.toLocaleString()}. Use more specific parameters to reduce response size.]`);
20
+ }
21
+ return response;
22
+ }
5
23
  /**
6
24
  * Enhances error messages with help links
7
25
  */
@@ -12,11 +30,23 @@ function enhanceErrorMessage(error) {
12
30
  /**
13
31
  * Wraps a tool's execute function with error handling that adds help links
14
32
  */
15
- function wrapExecuteWithErrorHandler(tool) {
33
+ function wrapExecuteWithErrorHandler(tool, config) {
16
34
  const originalExecute = tool.execute;
17
35
  const wrappedExecute = async (args, context) => {
36
+ // Check for third-party actions at runtime if noThirdParty mode is enabled
37
+ if (config.noThirdParty) {
38
+ const thirdPartyCheck = checkThirdPartyAction(tool.name, args);
39
+ if (thirdPartyCheck.blocked) {
40
+ throw new Error(`${thirdPartyCheck.reason}\n\nRestart the server without --no-third-party to enable external communications.${HELP_MESSAGE}`);
41
+ }
42
+ }
18
43
  try {
19
- return await originalExecute(args, context);
44
+ const result = await originalExecute(args, context);
45
+ // Apply global response size guard to string results
46
+ if (typeof result === 'string') {
47
+ return guardResponseSize(result, tool.name);
48
+ }
49
+ return result;
20
50
  }
21
51
  catch (error) {
22
52
  throw new Error(enhanceErrorMessage(error));
@@ -31,6 +61,7 @@ function wrapExecuteWithErrorHandler(tool) {
31
61
  * Wraps a FastMCP server to:
32
62
  * 1. Add global error handling with help links to all tools
33
63
  * 2. Enforce read-only mode based on tool annotations (if enabled)
64
+ * 3. Block third-party communications (if enabled)
34
65
  *
35
66
  * @param server - The FastMCP server instance
36
67
  * @param config - Server configuration
@@ -39,7 +70,7 @@ function wrapExecuteWithErrorHandler(tool) {
39
70
  export function createServerWithConfig(server, config) {
40
71
  // Store original addTool method
41
72
  const originalAddTool = server.addTool.bind(server);
42
- // Override addTool to wrap all tools with error handling (and read-only enforcement if configured)
73
+ // Override addTool to wrap all tools with error handling (and mode enforcement if configured)
43
74
  server.addTool = function (tool) {
44
75
  const isReadOnly = tool.annotations?.readOnlyHint === true;
45
76
  // In read-only mode, block non-read-only tools
@@ -57,18 +88,56 @@ export function createServerWithConfig(server, config) {
57
88
  originalAddTool(blockedTool);
58
89
  return;
59
90
  }
60
- // Wrap tool with error handler
61
- const wrappedTool = wrapExecuteWithErrorHandler(tool);
91
+ // Wrap tool with error handler and third-party checking
92
+ const wrappedTool = wrapExecuteWithErrorHandler(tool, config);
62
93
  originalAddTool(wrappedTool);
63
94
  };
64
95
  return server;
65
96
  }
66
97
  /**
67
- * Parse server config from environment variables
98
+ * Parse server config from environment variables and optional config file
68
99
  */
69
100
  export function getServerConfigFromEnv() {
70
- return {
101
+ // Start with defaults
102
+ const config = {
71
103
  readOnly: process.env.GOOGLE_MCP_READ_ONLY === 'true',
104
+ noThirdParty: process.env.GOOGLE_MCP_NO_THIRD_PARTY === 'true',
105
+ pathSecurity: { ...DEFAULT_PATH_SECURITY_CONFIG },
72
106
  };
107
+ // Allow overriding allowed paths via environment variables (comma-separated)
108
+ if (process.env.GOOGLE_MCP_ALLOWED_WRITE_PATHS) {
109
+ config.pathSecurity.allowedWritePaths = process.env.GOOGLE_MCP_ALLOWED_WRITE_PATHS.split(',')
110
+ .map((p) => p.trim())
111
+ .filter((p) => p.length > 0);
112
+ }
113
+ if (process.env.GOOGLE_MCP_ALLOWED_READ_PATHS) {
114
+ config.pathSecurity.allowedReadPaths = process.env.GOOGLE_MCP_ALLOWED_READ_PATHS.split(',')
115
+ .map((p) => p.trim())
116
+ .filter((p) => p.length > 0);
117
+ }
118
+ // Allow adding additional forbidden patterns via environment variable (comma-separated)
119
+ if (process.env.GOOGLE_MCP_FORBIDDEN_PATHS) {
120
+ const additionalPatterns = process.env.GOOGLE_MCP_FORBIDDEN_PATHS.split(',')
121
+ .map((p) => p.trim())
122
+ .filter((p) => p.length > 0);
123
+ config.pathSecurity.forbiddenPathPatterns = [
124
+ ...config.pathSecurity.forbiddenPathPatterns,
125
+ ...additionalPatterns,
126
+ ];
127
+ }
128
+ return config;
129
+ }
130
+ /**
131
+ * Get the current server configuration (for use in tool modules)
132
+ */
133
+ let currentConfig = null;
134
+ export function setServerConfig(config) {
135
+ currentConfig = config;
136
+ }
137
+ export function getServerConfig() {
138
+ if (!currentConfig) {
139
+ currentConfig = getServerConfigFromEnv();
140
+ }
141
+ return currentConfig;
73
142
  }
74
143
  //# sourceMappingURL=serverWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverWrapper.js","sourceRoot":"","sources":["../src/serverWrapper.ts"],"names":[],"mappings":"AAUA,MAAM,YAAY,GAAG;;;yEAGoD,CAAC;AAE1E;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,GAAG,OAAO,GAAG,YAAY,EAAE,CAAC;AACrC,CAAC;AAmBD;;GAEG;AACH,SAAS,2BAA2B,CAClC,IAAoC;IAEpC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;IAErC,MAAM,cAAc,GAAG,KAAK,EAAE,IAAa,EAAE,OAAmB,EAAoB,EAAE;QACpF,IAAI,CAAC;YACH,OAAO,MAAO,eAA4E,CACxF,IAAI,EACJ,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,cAAgD;KAC1D,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAkB,EAClB,MAAoB;IAEpB,gCAAgC;IAChC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEpD,mGAAmG;IACnG,MAAM,CAAC,OAAO,GAAG,UACf,IAAoC;QAEpC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,KAAK,IAAI,CAAC;QAE3D,+CAA+C;QAC/C,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3B,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,QAAoB,EAAmB,EAAE;gBAC/E,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,SAAS,QAAQ,sDAAsD;oBACrE,kGAAkG,YAAY,EAAE,CACnH,CACF,CAAC;YACJ,CAAC,CAAC;YAEF,MAAM,WAAW,GAAmC;gBAClD,GAAG,IAAI;gBACP,OAAO,EAAE,cAAqC;gBAC9C,WAAW,EAAE,+BAA+B,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE;aACrE,CAAC;YAEF,eAAe,CAAC,WAAW,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,MAAM,WAAW,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;QACtD,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;KACtD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"serverWrapper.js","sourceRoot":"","sources":["../src/serverWrapper.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.tools.d.ts","sourceRoot":"","sources":["../../src/tools/calendar.tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgBvD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,QAkfjE"}
1
+ {"version":3,"file":"calendar.tools.d.ts","sourceRoot":"","sources":["../../src/tools/calendar.tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAiBvD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,QAkfjE"}
@@ -8,7 +8,8 @@ function formatDateTime(dt) {
8
8
  return 'N/A';
9
9
  if (dt.dateTime) {
10
10
  const d = new Date(dt.dateTime);
11
- return d.toLocaleString() + (dt.timeZone ? ` (${dt.timeZone})` : '');
11
+ const tz = dt.timeZone || Intl.DateTimeFormat().resolvedOptions().timeZone;
12
+ return d.toLocaleString('en-US', { timeZone: tz }) + ' (' + tz + ')';
12
13
  }
13
14
  if (dt.date)
14
15
  return dt.date + ' (all day)';
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.tools.js","sourceRoot":"","sources":["../../src/tools/calendar.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calendar.tools.js","sourceRoot":"","sources":["../../src/tools/calendar.tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"docs.tools.d.ts","sourceRoot":"","sources":["../../src/tools/docs.tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAWL,KAAK,eAAe,EAWrB,MAAM,aAAa,CAAC;AAmJrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,QA45DzD"}
1
+ {"version":3,"file":"docs.tools.d.ts","sourceRoot":"","sources":["../../src/tools/docs.tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAWL,KAAK,eAAe,EAWrB,MAAM,aAAa,CAAC;AAqJrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,QAo7DzD"}
@@ -5,6 +5,8 @@ import { AccountDocumentParameters, OptionalRangeParameters, TextStyleParameters
5
5
  import * as GDocsHelpers from '../googleDocsApiHelpers.js';
6
6
  import { isGoogleApiError, getErrorMessage } from '../errorHelpers.js';
7
7
  import { getDocsUrl } from '../urlHelpers.js';
8
+ import { validateReadPath, wrapCommentContent, wrapDocumentContent } from '../securityHelpers.js';
9
+ import { getServerConfig } from '../serverWrapper.js';
8
10
  /**
9
11
  * Converts Google Docs JSON structure to Markdown format
10
12
  */
@@ -217,9 +219,11 @@ export function registerDocsTools(options) {
217
219
  // Apply length limit to markdown if specified
218
220
  if (args.maxLength && totalLength > args.maxLength) {
219
221
  const truncatedContent = markdownContent.substring(0, args.maxLength);
220
- return `${truncatedContent}\n\n... [Markdown truncated to ${args.maxLength} chars of ${totalLength} total. Use maxLength parameter to adjust limit or remove it to get full content.]`;
222
+ const wrappedContent = wrapDocumentContent(truncatedContent, res.data.title || undefined);
223
+ return `${wrappedContent}\n\n... [Markdown truncated to ${args.maxLength} chars of ${totalLength} total. Use maxLength parameter to adjust limit or remove it to get full content.]`;
221
224
  }
222
- return markdownContent;
225
+ // Wrap markdown content with security warning
226
+ return wrapDocumentContent(markdownContent, res.data.title || undefined);
223
227
  }
224
228
  // Default: Text format - extract all text content
225
229
  let textContent = '';
@@ -255,15 +259,19 @@ export function registerDocsTools(options) {
255
259
  const totalLength = textContent.length;
256
260
  log.info(`Document contains ${totalLength} characters across ${elementCount} elements`);
257
261
  log.info(`maxLength parameter: ${args.maxLength || 'not specified'}`);
262
+ // Wrap document content to defend against prompt injection
263
+ const docTitle = res.data.title || undefined;
258
264
  // Apply length limit only if specified
259
265
  if (args.maxLength && totalLength > args.maxLength) {
260
266
  const truncatedContent = textContent.substring(0, args.maxLength);
261
267
  log.info(`Truncating content from ${totalLength} to ${args.maxLength} characters`);
262
- return `Content (truncated to ${args.maxLength} chars of ${totalLength} total):\n---\n${truncatedContent}\n\n... [Document continues for ${totalLength - args.maxLength} more characters. Use maxLength parameter to adjust limit or remove it to get full content.]`;
268
+ const wrappedContent = wrapDocumentContent(truncatedContent, docTitle);
269
+ return `Content (truncated to ${args.maxLength} chars of ${totalLength} total):\n${wrappedContent}\n\n... [Document continues for ${totalLength - args.maxLength} more characters. Use maxLength parameter to adjust limit or remove it to get full content.]`;
263
270
  }
264
- // Return full content
271
+ // Return full content wrapped with security warning
265
272
  const docLink = getDocsUrl(args.documentId, email);
266
- const fullResponse = `Content (${totalLength} characters):\n---\n${textContent}\n\n---\nView document: ${docLink}`;
273
+ const wrappedContent = wrapDocumentContent(textContent, docTitle);
274
+ const fullResponse = `Content (${totalLength} characters):\n${wrappedContent}\n\n---\nView document: ${docLink}`;
267
275
  const responseLength = fullResponse.length;
268
276
  log.info(`Returning full content: ${responseLength} characters in response (${totalLength} content + ${responseLength - totalLength} metadata)`);
269
277
  return fullResponse;
@@ -1085,7 +1093,12 @@ export function registerDocsTools(options) {
1085
1093
  execute: async (args, { log }) => {
1086
1094
  const docs = await getDocsClient(args.account);
1087
1095
  const drive = await getDriveClient(args.account);
1088
- log.info(`Uploading local image ${args.localImagePath} and inserting at index ${args.index} in doc ${args.documentId}`);
1096
+ // Validate path for security
1097
+ const pathValidation = validateReadPath(args.localImagePath, getServerConfig().pathSecurity);
1098
+ if (!pathValidation.valid) {
1099
+ throw new UserError(`Cannot read from this path: ${pathValidation.error}`);
1100
+ }
1101
+ log.info(`Uploading local image ${pathValidation.resolvedPath} and inserting at index ${args.index} in doc ${args.documentId}`);
1089
1102
  try {
1090
1103
  // Get the document's parent folder if requested
1091
1104
  let parentFolderId;
@@ -1107,7 +1120,7 @@ export function registerDocsTools(options) {
1107
1120
  }
1108
1121
  // Upload the image to Drive
1109
1122
  log.info('Uploading image to Drive...');
1110
- const imageUrl = await GDocsHelpers.uploadImageToDrive(drive, args.localImagePath, parentFolderId);
1123
+ const imageUrl = await GDocsHelpers.uploadImageToDrive(drive, pathValidation.resolvedPath, parentFolderId);
1111
1124
  log.info(`Image uploaded successfully, public URL: ${imageUrl}`);
1112
1125
  // Insert the image into the document
1113
1126
  await GDocsHelpers.insertInlineImage(docs, args.documentId, imageUrl, args.index, args.width, args.height);
@@ -1202,7 +1215,9 @@ export function registerDocsTools(options) {
1202
1215
  const anchor = quotedText !== 'No quoted text'
1203
1216
  ? ` (anchored to: "${quotedText.substring(0, 100)}${quotedText.length > 100 ? '...' : ''}")`
1204
1217
  : '';
1205
- let result = `\n${index + 1}. **${author}** (${date})${status}${anchor}\n ${comment.content}`;
1218
+ // Wrap comment content to defend against prompt injection
1219
+ const wrappedContent = wrapCommentContent(comment.content || '', author);
1220
+ let result = `\n${index + 1}. **${author}** (${date})${status}${anchor}\n${wrappedContent}`;
1206
1221
  if (replies > 0) {
1207
1222
  result += `\n └─ ${replies} ${replies === 1 ? 'reply' : 'replies'}`;
1208
1223
  }
@@ -1248,7 +1263,9 @@ export function registerDocsTools(options) {
1248
1263
  const status = comment.resolved ? ' [RESOLVED]' : '';
1249
1264
  const quotedText = comment.quotedFileContent?.value || 'No quoted text';
1250
1265
  const anchor = quotedText !== 'No quoted text' ? `\nAnchored to: "${quotedText}"` : '';
1251
- let result = `**${author}** (${date})${status}${anchor}\n${comment.content}`;
1266
+ // Wrap comment content to defend against prompt injection
1267
+ const wrappedContent = wrapCommentContent(comment.content || '', author);
1268
+ let result = `**${author}** (${date})${status}${anchor}\n${wrappedContent}`;
1252
1269
  // Add replies if any
1253
1270
  if (comment.replies && comment.replies.length > 0) {
1254
1271
  result += '\n\n**Replies:**';
@@ -1257,7 +1274,9 @@ export function registerDocsTools(options) {
1257
1274
  const replyDate = reply.createdTime
1258
1275
  ? new Date(reply.createdTime).toLocaleDateString()
1259
1276
  : 'Unknown date';
1260
- result += `\n${index + 1}. **${replyAuthor}** (${replyDate})\n ${reply.content}`;
1277
+ // Wrap reply content to defend against prompt injection
1278
+ const wrappedReply = wrapCommentContent(reply.content || '', replyAuthor);
1279
+ result += `\n${index + 1}. **${replyAuthor}** (${replyDate})\n${wrappedReply}`;
1261
1280
  });
1262
1281
  }
1263
1282
  return result;