diff --git a/CLAUDE.md b/CLAUDE.md index 3bc1f40..34de8c7 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,6 +4,8 @@ MCP server for Google Workspace integration (Drive, Sheets, Forms, Docs, Gmail, Calendar). Version 3.3.0. +**Linear:** Team "Google Drive" (ID: `9fd7c68d-cf3f-4ac0-a0d7-42605c079da1`) — issues prefixed `GDRIVE-` + - 6 operation-based tools with 47 total operations - Redis caching (optional, graceful fallback) - Token encryption with key rotation diff --git a/package-lock.json b/package-lock.json index df8a337..3387419 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@modelcontextprotocol/server-gdrive", - "version": "3.3.0", + "version": "4.0.0-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modelcontextprotocol/server-gdrive", - "version": "3.3.0", + "version": "4.0.0-alpha", "license": "MIT", "dependencies": { "@google-cloud/local-auth": "^3.0.1", @@ -8640,4 +8640,4 @@ } } } -} +} \ No newline at end of file diff --git a/src/sdk/spec.ts b/src/sdk/spec.ts index 004a514..fbed571 100644 --- a/src/sdk/spec.ts +++ b/src/sdk/spec.ts @@ -297,14 +297,21 @@ export const SDK_SPEC: SDKSpec = { returns: "{ formId, title, description, questions: Question[], responderUri, editUri }", }, addQuestion: { - signature: "addQuestion(options: { formId: string, question: QuestionSpec }): Promise<{ formId, questionId, title, type }>", + signature: "addQuestion(options: { formId: string, title: string, type: QuestionType, required?: boolean, options?: string[], scaleMin?: number, scaleMax?: number, scaleMinLabel?: string, scaleMaxLabel?: string }): Promise<{ formId, title, type, message }>", description: "Add a question to an existing form.", - example: "await sdk.forms.addQuestion({\n formId: '1FAIpQLSf...',\n question: {\n title: 'Rate your experience',\n type: 'SCALE',\n required: true,\n scaleMin: 1, scaleMax: 5\n }\n});", + example: "await sdk.forms.addQuestion({\n formId: '1FAIpQLSf...',\n title: 'Rate your experience',\n type: 'LINEAR_SCALE',\n required: true,\n scaleMin: 1,\n scaleMax: 5,\n scaleMinLabel: 'Poor',\n scaleMaxLabel: 'Excellent'\n});", params: { formId: "string (required)", - "question": "QuestionSpec — { title: string, type: 'SHORT_ANSWER' | 'PARAGRAPH' | 'MULTIPLE_CHOICE' | 'CHECKBOX' | 'DROPDOWN' | 'SCALE' | 'DATE' | 'TIME', required?: boolean, options?: string[], scaleMin?: number, scaleMax?: number }", - }, - returns: "{ formId, questionId, title, type }", + title: "string (required) — question title/text", + type: "QuestionType — 'TEXT' | 'PARAGRAPH_TEXT' | 'MULTIPLE_CHOICE' | 'CHECKBOX' | 'DROPDOWN' | 'LINEAR_SCALE' | 'DATE' | 'TIME'", + required: "boolean (optional, default false) — whether answer is required", + options: "string[] (optional) — choices for MULTIPLE_CHOICE, CHECKBOX, DROPDOWN", + scaleMin: "number (optional, default 1) — minimum for LINEAR_SCALE", + scaleMax: "number (optional, default 5) — maximum for LINEAR_SCALE", + scaleMinLabel: "string (optional) — label for minimum scale value", + scaleMaxLabel: "string (optional) — label for maximum scale value", + }, + returns: "{ formId, title, type, message }", }, listResponses: { signature: "listResponses(options: { formId: string, pageSize?: number, pageToken?: string }): Promise<{ formId, totalResponses, responses: FormResponse[] }>", diff --git a/src/tools/listTools.ts b/src/tools/listTools.ts index cbaf198..a0d5495 100644 --- a/src/tools/listTools.ts +++ b/src/tools/listTools.ts @@ -139,9 +139,9 @@ export async function generateToolStructure(): Promise { }, { name: 'addQuestion', - signature: 'addQuestion({ formId: string, title: string, questionType: string, ... })', - description: 'Add a question to a form', - example: 'forms.addQuestion({ formId: "abc123", title: "Your rating", questionType: "SCALE" })', + signature: 'addQuestion({ formId: string, title: string, type: QuestionType, required?: boolean, options?: string[], scaleMin?: number, scaleMax?: number, scaleMinLabel?: string, scaleMaxLabel?: string })', + description: 'Add a question to a form. QuestionType: TEXT | PARAGRAPH_TEXT | MULTIPLE_CHOICE | CHECKBOX | DROPDOWN | LINEAR_SCALE | DATE | TIME', + example: 'forms.addQuestion({ formId: "abc123", title: "Your rating", type: "LINEAR_SCALE", scaleMin: 1, scaleMax: 5 })', }, { name: 'listResponses', @@ -368,4 +368,4 @@ export async function getToolDefinition( ): Promise { const moduleTools = await getModuleTools(moduleName); return moduleTools.find(tool => tool.name === toolName); -} +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index ce5ceb0..9b58c69 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -19,7 +19,8 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, - "exactOptionalPropertyTypes": true + "exactOptionalPropertyTypes": true, + "ignoreDeprecations": "5.0" }, "include": [ "./**/*.ts" @@ -33,4 +34,4 @@ "**/*.test.ts", "**/*.spec.ts" ] -} +} \ No newline at end of file