mcp-google-multi 4.5.0-alpha.1 → 4.5.0-alpha.2

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.
package/dist/index.js CHANGED
@@ -18,6 +18,7 @@ import { registerFormsTools } from './tools/forms.js';
18
18
  import { registerChatTools } from './tools/chat.js';
19
19
  import { registerAdminTools, registerAlertCenterTools } from './tools/admin.js';
20
20
  import { getOptionalBundles, getAdminAccounts } from './auth.js';
21
+ import { ToolRegistry } from './registry.js';
21
22
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
22
23
  const pkg = JSON.parse(readFileSync(path.resolve(__dirname, '..', 'package.json'), 'utf-8'));
23
24
  async function main() {
@@ -36,24 +37,25 @@ async function main() {
36
37
  name: 'mcp-google-multi',
37
38
  version: pkg.version,
38
39
  });
39
- registerGmailTools(server);
40
- registerDriveTools(server);
41
- registerCalendarTools(server);
42
- registerSheetsTools(server);
43
- registerDocsTools(server);
44
- registerContactsTools(server);
45
- registerSearchConsoleTools(server);
46
- registerTasksTools(server);
47
- registerMeetTools(server);
40
+ const registry = new ToolRegistry(server);
41
+ registerGmailTools(registry);
42
+ registerDriveTools(registry);
43
+ registerCalendarTools(registry);
44
+ registerSheetsTools(registry);
45
+ registerDocsTools(registry);
46
+ registerContactsTools(registry);
47
+ registerSearchConsoleTools(registry);
48
+ registerTasksTools(registry);
49
+ registerMeetTools(registry);
48
50
  const optional = new Set(getOptionalBundles());
49
51
  if (optional.has('forms'))
50
- registerFormsTools(server);
52
+ registerFormsTools(registry);
51
53
  if (optional.has('chat'))
52
- registerChatTools(server);
54
+ registerChatTools(registry);
53
55
  if (optional.has('alertcenter'))
54
- registerAlertCenterTools(server);
56
+ registerAlertCenterTools(registry);
55
57
  if (getAdminAccounts().length > 0)
56
- registerAdminTools(server);
58
+ registerAdminTools(registry);
57
59
  const transport = new StdioServerTransport();
58
60
  await server.connect(transport);
59
61
  }
@@ -0,0 +1,13 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export type Cud = 'read' | 'create' | 'update' | 'delete';
3
+ export interface ToolEntry {
4
+ name: string;
5
+ service: string;
6
+ cud: Cud;
7
+ }
8
+ export declare function inferCud(name: string): Cud;
9
+ export declare class ToolRegistry {
10
+ readonly tools: ToolEntry[];
11
+ readonly registerTool: McpServer['registerTool'];
12
+ constructor(server: McpServer);
13
+ }
@@ -0,0 +1,29 @@
1
+ const CUD_OVERRIDES = {
2
+ drive_untrash: 'update',
3
+ };
4
+ const DELETE_VERB = /(^|_)(delete|remove|trash|clear|empty)(_|$)/;
5
+ const CREATE_VERB = /(^|_)(create|add|insert|send|upload|copy|import|append|submit|duplicate|share|quick)(_|$)/;
6
+ const UPDATE_VERB = /(^|_)(update|patch|modify|set|move|write|format|merge|unmerge|sort|replace|resize|publish|resolve)(_|$)/;
7
+ export function inferCud(name) {
8
+ const override = CUD_OVERRIDES[name];
9
+ if (override)
10
+ return override;
11
+ if (DELETE_VERB.test(name))
12
+ return 'delete';
13
+ if (CREATE_VERB.test(name))
14
+ return 'create';
15
+ if (UPDATE_VERB.test(name))
16
+ return 'update';
17
+ return 'read';
18
+ }
19
+ export class ToolRegistry {
20
+ tools = [];
21
+ registerTool;
22
+ constructor(server) {
23
+ this.registerTool = ((name, ...rest) => {
24
+ const service = name.includes('_') ? name.slice(0, name.indexOf('_')) : name;
25
+ this.tools.push({ name, service, cud: inferCud(name) });
26
+ return server.registerTool(name, ...rest);
27
+ });
28
+ }
29
+ }
@@ -1,4 +1,4 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
1
+ import type { ToolRegistry } from '../registry.js';
2
2
  /**
3
3
  * Admin SDK tools require Workspace super-admin (or delegated admin) privileges on the target account.
4
4
  * Personal `@gmail.com` accounts will 403 on every endpoint.
@@ -6,7 +6,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
6
  * Writes are gated behind GOOGLE_ALLOW_ADMIN_WRITES=true to prevent accidents on small orgs
7
7
  * (a stray users.update on a 3-person Workspace is a bad day).
8
8
  */
9
- export declare function registerAdminTools(server: McpServer): void;
9
+ export declare function registerAdminTools(server: ToolRegistry): void;
10
10
  /**
11
11
  * Alert Center tools. Gated behind the `alertcenter` optional bundle, NOT the
12
12
  * admin bundle: the apps.alerts scope cannot be granted via this server's
@@ -14,4 +14,4 @@ export declare function registerAdminTools(server: McpServer): void;
14
14
  * domain-wide delegation. Registered separately so a missing/ungrantable
15
15
  * apps.alerts scope never blocks the working Admin SDK admin tools.
16
16
  */
17
- export declare function registerAlertCenterTools(server: McpServer): void;
17
+ export declare function registerAlertCenterTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerCalendarTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerCalendarTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerChatTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerChatTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerContactsTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerContactsTools(server: ToolRegistry): void;
@@ -1,5 +1,5 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerDocsTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerDocsTools(server: ToolRegistry): void;
3
3
  export declare function buildParagraphStyle(input: {
4
4
  namedStyleType?: string;
5
5
  alignment?: string;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerDriveTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerDriveTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerFormsTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerFormsTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerGmailTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerGmailTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerMeetTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerMeetTools(server: ToolRegistry): void;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSearchConsoleTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerSearchConsoleTools(server: ToolRegistry): void;
@@ -1,5 +1,5 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerSheetsTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerSheetsTools(server: ToolRegistry): void;
3
3
  export declare function buildCellFormat(input: {
4
4
  backgroundColor?: {
5
5
  red?: number;
@@ -1,2 +1,2 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function registerTasksTools(server: McpServer): void;
1
+ import type { ToolRegistry } from '../registry.js';
2
+ export declare function registerTasksTools(server: ToolRegistry): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-google-multi",
3
- "version": "4.5.0-alpha.1",
3
+ "version": "4.5.0-alpha.2",
4
4
  "description": "MCP server for Gmail, Google Drive, Calendar, Sheets, Docs, and Contacts with multi-account support",
5
5
  "type": "module",
6
6
  "license": "MIT",