@triffon/google-docs-mcp 1.11.3-triffon

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 (165) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +567 -0
  3. package/dist/auth.js +327 -0
  4. package/dist/cachedToolsList.js +38 -0
  5. package/dist/clients.js +180 -0
  6. package/dist/config.js +9 -0
  7. package/dist/downloadProxy.js +82 -0
  8. package/dist/driveQueryUtils.js +7 -0
  9. package/dist/firestoreTokenStorage.js +32 -0
  10. package/dist/googleDocsApiHelpers.js +1257 -0
  11. package/dist/googleSheetsApiHelpers.js +849 -0
  12. package/dist/index.js +240 -0
  13. package/dist/landingPage.js +103 -0
  14. package/dist/logger.js +58 -0
  15. package/dist/markdown-transformer/docsToMarkdown.js +259 -0
  16. package/dist/markdown-transformer/index.js +128 -0
  17. package/dist/markdown-transformer/markdownToDocs.js +834 -0
  18. package/dist/remoteWrapper.js +72 -0
  19. package/dist/tools/calendar/createEvent.js +89 -0
  20. package/dist/tools/calendar/deleteEvent.js +49 -0
  21. package/dist/tools/calendar/helpers.js +19 -0
  22. package/dist/tools/calendar/index.js +12 -0
  23. package/dist/tools/calendar/listEvents.js +84 -0
  24. package/dist/tools/calendar/quickAddEvent.js +55 -0
  25. package/dist/tools/calendar/updateEvent.js +84 -0
  26. package/dist/tools/docs/addTab.js +84 -0
  27. package/dist/tools/docs/appendTableRows.js +89 -0
  28. package/dist/tools/docs/appendToGoogleDoc.js +85 -0
  29. package/dist/tools/docs/cloneTable.js +159 -0
  30. package/dist/tools/docs/comments/addComment.js +83 -0
  31. package/dist/tools/docs/comments/deleteComment.js +30 -0
  32. package/dist/tools/docs/comments/getComment.js +45 -0
  33. package/dist/tools/docs/comments/index.js +14 -0
  34. package/dist/tools/docs/comments/listComments.js +43 -0
  35. package/dist/tools/docs/comments/replyToComment.js +35 -0
  36. package/dist/tools/docs/comments/resolveComment.js +55 -0
  37. package/dist/tools/docs/deleteRange.js +61 -0
  38. package/dist/tools/docs/deleteTableRows.js +62 -0
  39. package/dist/tools/docs/findAndReplace.js +54 -0
  40. package/dist/tools/docs/findElement.js +43 -0
  41. package/dist/tools/docs/findSectionsByHeading.js +46 -0
  42. package/dist/tools/docs/formatting/applyParagraphStyle.js +83 -0
  43. package/dist/tools/docs/formatting/applyTextStyle.js +49 -0
  44. package/dist/tools/docs/formatting/batchApplyTextStyle.js +86 -0
  45. package/dist/tools/docs/formatting/index.js +16 -0
  46. package/dist/tools/docs/formatting/updateTableBorders.js +81 -0
  47. package/dist/tools/docs/formatting/updateTableCellStyle.js +85 -0
  48. package/dist/tools/docs/formatting/updateTableColumnWidth.js +51 -0
  49. package/dist/tools/docs/formatting/updateTableRowStyle.js +74 -0
  50. package/dist/tools/docs/getTableStructure.js +48 -0
  51. package/dist/tools/docs/index.js +66 -0
  52. package/dist/tools/docs/insertDateChip.js +82 -0
  53. package/dist/tools/docs/insertImage.js +112 -0
  54. package/dist/tools/docs/insertPageBreak.js +47 -0
  55. package/dist/tools/docs/insertPerson.js +53 -0
  56. package/dist/tools/docs/insertRichLink.js +58 -0
  57. package/dist/tools/docs/insertSectionBreak.js +60 -0
  58. package/dist/tools/docs/insertTable.js +42 -0
  59. package/dist/tools/docs/insertTableWithData.js +125 -0
  60. package/dist/tools/docs/insertText.js +49 -0
  61. package/dist/tools/docs/listDocumentTables.js +47 -0
  62. package/dist/tools/docs/listDocumentTabs.js +59 -0
  63. package/dist/tools/docs/listSmartChips.js +41 -0
  64. package/dist/tools/docs/modifyText.js +147 -0
  65. package/dist/tools/docs/readGoogleDoc.js +164 -0
  66. package/dist/tools/docs/renameTab.js +47 -0
  67. package/dist/tools/docs/replaceTableRowData.js +55 -0
  68. package/dist/tools/docs/smartChipHelpers.js +71 -0
  69. package/dist/tools/docs/structureHelpers.js +250 -0
  70. package/dist/tools/docs/tabFieldMasks.js +48 -0
  71. package/dist/tools/docs/tableRowDataHelpers.js +53 -0
  72. package/dist/tools/docs/updateSectionStyle.js +148 -0
  73. package/dist/tools/drive/copyFile.js +63 -0
  74. package/dist/tools/drive/createDocument.js +105 -0
  75. package/dist/tools/drive/createFolder.js +48 -0
  76. package/dist/tools/drive/createFromTemplate.js +82 -0
  77. package/dist/tools/drive/deleteFile.js +72 -0
  78. package/dist/tools/drive/downloadFile.js +266 -0
  79. package/dist/tools/drive/getDocumentInfo.js +48 -0
  80. package/dist/tools/drive/getFolderInfo.js +48 -0
  81. package/dist/tools/drive/index.js +34 -0
  82. package/dist/tools/drive/listDriveFiles.js +129 -0
  83. package/dist/tools/drive/listFolderContents.js +83 -0
  84. package/dist/tools/drive/listGoogleDocs.js +70 -0
  85. package/dist/tools/drive/moveFile.js +54 -0
  86. package/dist/tools/drive/renameFile.js +39 -0
  87. package/dist/tools/drive/savePathGuard.js +86 -0
  88. package/dist/tools/drive/searchDriveFiles.js +148 -0
  89. package/dist/tools/drive/searchGoogleDocs.js +77 -0
  90. package/dist/tools/drive/setFilePermission.js +68 -0
  91. package/dist/tools/gmail/createDraft.js +58 -0
  92. package/dist/tools/gmail/deleteDraft.js +37 -0
  93. package/dist/tools/gmail/getDraft.js +52 -0
  94. package/dist/tools/gmail/getMessage.js +92 -0
  95. package/dist/tools/gmail/helpers.js +113 -0
  96. package/dist/tools/gmail/index.js +28 -0
  97. package/dist/tools/gmail/listDrafts.js +74 -0
  98. package/dist/tools/gmail/listLabels.js +31 -0
  99. package/dist/tools/gmail/listMessages.js +87 -0
  100. package/dist/tools/gmail/modifyMessageLabels.js +54 -0
  101. package/dist/tools/gmail/sendDraft.js +42 -0
  102. package/dist/tools/gmail/sendEmail.js +56 -0
  103. package/dist/tools/gmail/trashMessage.js +37 -0
  104. package/dist/tools/gmail/triageInbox.js +147 -0
  105. package/dist/tools/gmail/updateDraft.js +60 -0
  106. package/dist/tools/index.js +64 -0
  107. package/dist/tools/script/appsScriptShared.js +96 -0
  108. package/dist/tools/script/createAppsScriptProject.js +74 -0
  109. package/dist/tools/script/getAppsScriptContent.js +56 -0
  110. package/dist/tools/script/index.js +14 -0
  111. package/dist/tools/script/updateAppsScriptContent.js +56 -0
  112. package/dist/tools/sheets/addConditionalFormatting.js +143 -0
  113. package/dist/tools/sheets/addSpreadsheetSheet.js +34 -0
  114. package/dist/tools/sheets/appendSpreadsheetRows.js +44 -0
  115. package/dist/tools/sheets/appendTableRows.js +51 -0
  116. package/dist/tools/sheets/autoResizeColumns.js +67 -0
  117. package/dist/tools/sheets/autoResizeRows.js +63 -0
  118. package/dist/tools/sheets/batchWrite.js +61 -0
  119. package/dist/tools/sheets/clearSpreadsheetRange.js +31 -0
  120. package/dist/tools/sheets/comments/commentAnchor.js +95 -0
  121. package/dist/tools/sheets/comments/createSheetsCellNote.js +33 -0
  122. package/dist/tools/sheets/comments/createSheetsComment.js +168 -0
  123. package/dist/tools/sheets/comments/deleteSheetsComment.js +32 -0
  124. package/dist/tools/sheets/comments/getSheetsComment.js +51 -0
  125. package/dist/tools/sheets/comments/index.js +16 -0
  126. package/dist/tools/sheets/comments/listSheetsComments.js +177 -0
  127. package/dist/tools/sheets/comments/replyToSheetsComment.js +37 -0
  128. package/dist/tools/sheets/comments/resolveSheetsComment.js +53 -0
  129. package/dist/tools/sheets/copyFormatting.js +59 -0
  130. package/dist/tools/sheets/copySheetTo.js +36 -0
  131. package/dist/tools/sheets/createSpreadsheet.js +72 -0
  132. package/dist/tools/sheets/createTable.js +120 -0
  133. package/dist/tools/sheets/deleteChart.js +41 -0
  134. package/dist/tools/sheets/deleteConditionalFormatting.js +46 -0
  135. package/dist/tools/sheets/deleteSheet.js +43 -0
  136. package/dist/tools/sheets/deleteTable.js +56 -0
  137. package/dist/tools/sheets/duplicateSheet.js +53 -0
  138. package/dist/tools/sheets/formatCells.js +122 -0
  139. package/dist/tools/sheets/freezeRowsAndColumns.js +58 -0
  140. package/dist/tools/sheets/getConditionalFormatting.js +98 -0
  141. package/dist/tools/sheets/getSpreadsheetInfo.js +44 -0
  142. package/dist/tools/sheets/getTable.js +48 -0
  143. package/dist/tools/sheets/groupRows.js +62 -0
  144. package/dist/tools/sheets/index.js +84 -0
  145. package/dist/tools/sheets/insertChart.js +225 -0
  146. package/dist/tools/sheets/listGoogleSheets.js +66 -0
  147. package/dist/tools/sheets/listTables.js +55 -0
  148. package/dist/tools/sheets/protectRange.js +59 -0
  149. package/dist/tools/sheets/readCellFormat.js +143 -0
  150. package/dist/tools/sheets/readSpreadsheet.js +36 -0
  151. package/dist/tools/sheets/renameSheet.js +48 -0
  152. package/dist/tools/sheets/setCellBorders.js +94 -0
  153. package/dist/tools/sheets/setColumnWidths.js +43 -0
  154. package/dist/tools/sheets/setDropdownValidation.js +51 -0
  155. package/dist/tools/sheets/setRowHeights.js +63 -0
  156. package/dist/tools/sheets/ungroupAllRows.js +66 -0
  157. package/dist/tools/sheets/updateTableRange.js +51 -0
  158. package/dist/tools/sheets/writeSpreadsheet.js +45 -0
  159. package/dist/tools/utils/appendMarkdownToGoogleDoc.js +95 -0
  160. package/dist/tools/utils/index.js +8 -0
  161. package/dist/tools/utils/replaceDocumentWithMarkdown.js +161 -0
  162. package/dist/tools/utils/replaceRangeWithMarkdown.js +72 -0
  163. package/dist/types.js +208 -0
  164. package/dist/upstreamAuth.js +62 -0
  165. package/package.json +51 -0
@@ -0,0 +1,128 @@
1
+ // src/markdown-transformer/index.ts
2
+ //
3
+ // Public API for bidirectional markdown <-> Google Docs conversion.
4
+ //
5
+ // Main methods:
6
+ // extractMarkdown() - Fetch a Google Doc and return its content as markdown
7
+ // insertMarkdown() - Convert markdown and insert it into a Google Doc
8
+ //
9
+ // Helper:
10
+ // docsJsonToMarkdown() - Convert already-fetched Docs JSON to markdown
11
+ //
12
+ import { docsJsonToMarkdown } from './docsToMarkdown.js';
13
+ import { convertMarkdownToRequests } from './markdownToDocs.js';
14
+ import { executeBatchUpdateWithSplitting, findTabById } from '../googleDocsApiHelpers.js';
15
+ export { docsJsonToMarkdown } from './docsToMarkdown.js';
16
+ /** Formats InsertMarkdownResult into a concise human-readable debug summary. */
17
+ export function formatInsertResult(result) {
18
+ const lines = [];
19
+ lines.push(`Markdown insert completed in ${result.totalElapsedMs}ms`);
20
+ lines.push(` Parse: ${result.parseElapsedMs}ms`);
21
+ lines.push(` Requests: ${result.totalRequests} total (${Object.entries(result.requestsByType)
22
+ .map(([k, v]) => `${v} ${k}`)
23
+ .join(', ')})`);
24
+ lines.push(` API calls: ${result.batchUpdate.totalApiCalls} batchUpdate calls in ${result.batchUpdate.totalElapsedMs}ms`);
25
+ const { phases } = result.batchUpdate;
26
+ if (phases.delete.requests > 0) {
27
+ lines.push(` Delete phase: ${phases.delete.requests} requests, ${phases.delete.apiCalls} calls, ${phases.delete.elapsedMs}ms`);
28
+ }
29
+ if (phases.insert.requests > 0) {
30
+ lines.push(` Insert phase: ${phases.insert.requests} requests, ${phases.insert.apiCalls} calls, ${phases.insert.elapsedMs}ms`);
31
+ }
32
+ if (phases.format.requests > 0) {
33
+ lines.push(` Format phase: ${phases.format.requests} requests, ${phases.format.apiCalls} calls, ${phases.format.elapsedMs}ms`);
34
+ }
35
+ return lines.join('\n');
36
+ }
37
+ // --- extractMarkdown ---
38
+ /**
39
+ * Fetches a Google Document and returns its content as a markdown string.
40
+ *
41
+ * @param docs - An authenticated Google Docs API client
42
+ * @param documentId - The document ID (from the URL)
43
+ * @param options - Optional: tabId to target a specific tab
44
+ * @returns The document content as markdown
45
+ */
46
+ export async function extractMarkdown(docs, documentId, options) {
47
+ const tabId = options?.tabId;
48
+ const res = await docs.documents.get({
49
+ documentId,
50
+ includeTabsContent: !!tabId,
51
+ fields: tabId
52
+ ? 'title,documentId,tabs(tabProperties,childTabs,documentTab(body,documentStyle,namedStyles,lists,inlineObjects,positionedObjects))'
53
+ : 'title,documentId,body,documentStyle,namedStyles,lists,inlineObjects,positionedObjects',
54
+ });
55
+ if (tabId) {
56
+ const targetTab = findTabById(res.data, tabId);
57
+ if (!targetTab) {
58
+ throw new Error(`Tab with ID "${tabId}" not found in document.`);
59
+ }
60
+ if (!targetTab.documentTab) {
61
+ throw new Error(`Tab "${tabId}" does not have content (may not be a document tab).`);
62
+ }
63
+ return docsJsonToMarkdown({
64
+ body: targetTab.documentTab.body,
65
+ lists: targetTab.documentTab.lists,
66
+ });
67
+ }
68
+ return docsJsonToMarkdown({
69
+ body: res.data.body,
70
+ lists: res.data.lists,
71
+ });
72
+ }
73
+ // --- insertMarkdown ---
74
+ /**
75
+ * Converts markdown to Google Docs formatting and inserts it into a document.
76
+ *
77
+ * Handles the full pipeline: markdown parsing, request generation, and batch
78
+ * execution against the Docs API. Callers never see raw API requests.
79
+ *
80
+ * @param docs - An authenticated Google Docs API client
81
+ * @param documentId - The document ID
82
+ * @param markdown - The markdown content to insert
83
+ * @param options - Optional: startIndex (default 1), tabId
84
+ * @returns Debug metadata about the operation (request counts, timing, API calls)
85
+ */
86
+ export async function insertMarkdown(docs, documentId, markdown, options) {
87
+ const overallStart = performance.now();
88
+ const startIndex = options?.startIndex ?? 1;
89
+ const tabId = options?.tabId;
90
+ const parseStart = performance.now();
91
+ const conversionOptions = options?.firstHeadingAsTitle
92
+ ? { firstHeadingAsTitle: true }
93
+ : undefined;
94
+ const requests = convertMarkdownToRequests(markdown, startIndex, tabId, conversionOptions);
95
+ const parseElapsedMs = Math.round(performance.now() - parseStart);
96
+ // Count requests by type
97
+ const requestsByType = {};
98
+ for (const r of requests) {
99
+ const type = Object.keys(r)[0];
100
+ requestsByType[type] = (requestsByType[type] || 0) + 1;
101
+ }
102
+ if (requests.length === 0) {
103
+ return {
104
+ totalRequests: 0,
105
+ requestsByType,
106
+ parseElapsedMs,
107
+ batchUpdate: {
108
+ totalRequests: 0,
109
+ phases: {
110
+ delete: { requests: 0, apiCalls: 0, elapsedMs: 0 },
111
+ insert: { requests: 0, apiCalls: 0, elapsedMs: 0 },
112
+ format: { requests: 0, apiCalls: 0, elapsedMs: 0 },
113
+ },
114
+ totalApiCalls: 0,
115
+ totalElapsedMs: 0,
116
+ },
117
+ totalElapsedMs: Math.round(performance.now() - overallStart),
118
+ };
119
+ }
120
+ const batchUpdate = await executeBatchUpdateWithSplitting(docs, documentId, requests);
121
+ return {
122
+ totalRequests: requests.length,
123
+ requestsByType,
124
+ parseElapsedMs,
125
+ batchUpdate,
126
+ totalElapsedMs: Math.round(performance.now() - overallStart),
127
+ };
128
+ }