Spaces:
Sleeping
Sleeping
| import type { FastMCP } from 'fastmcp'; | |
| import { UserError } from 'fastmcp'; | |
| import { google } from 'googleapis'; | |
| import { getDocsClient, getDriveClient, getAuthClient } from '../../../clients.js'; | |
| import { DocumentIdParameter } from '../../../types.js'; | |
| export function register(server: FastMCP) { | |
| server.addTool({ | |
| name: 'listComments', | |
| description: | |
| 'Lists all comments in a document with their IDs, authors, status, and quoted text. Returns data needed to call getComment, replyToComment, resolveComment, or deleteComment.', | |
| parameters: DocumentIdParameter, | |
| execute: async (args, { log }) => { | |
| log.info(`Listing comments for document ${args.documentId}`); | |
| const docsClient = await getDocsClient(); | |
| const driveClient = await getDriveClient(); | |
| try { | |
| // First get the document to have context | |
| const doc = await docsClient.documents.get({ documentId: args.documentId }); | |
| // Use Drive API v3 with proper fields to get quoted content | |
| const authClient = await getAuthClient(); | |
| const drive = google.drive({ version: 'v3', auth: authClient }); | |
| const response = await drive.comments.list({ | |
| fileId: args.documentId, | |
| fields: 'comments(id,content,quotedFileContent,author,createdTime,resolved)', | |
| pageSize: 100, | |
| }); | |
| const comments = (response.data.comments || []).map((comment: any) => ({ | |
| id: comment.id, | |
| author: comment.author?.displayName || null, | |
| content: comment.content, | |
| quotedText: comment.quotedFileContent?.value || null, | |
| resolved: comment.resolved || false, | |
| createdTime: comment.createdTime, | |
| modifiedTime: comment.modifiedTime, | |
| replyCount: comment.replies?.length || 0, | |
| })); | |
| return JSON.stringify({ comments }, null, 2); | |
| } catch (error: any) { | |
| log.error(`Error listing comments: ${error.message || error}`); | |
| throw new UserError(`Failed to list comments: ${error.message || 'Unknown error'}`); | |
| } | |
| }, | |
| }); | |
| } | |