github TypeScript analyzed ccdf507

aaronsb/google-workspace-mcp

github

A Model Context Protocol (MCP) server that provides authenticated access to Google Workspace APIs, offering integrated Authentication, Gmail, Calendar, and Drive functionality

maintainer
aaronsb
licence
Apache-2.0
first seen
2026-07-11
last seen
2026-09-01
releases · 30d
2
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit ccdf507 · analyzer v33 · 1w ago

danger signals9

code evidence vv4.5.1 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 153

filesystem 41

  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/adr-103-differential-harness.mjs :27 import { readFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/api-descriptor/check-conformance.mjs :16 import { writeFileSync, readFileSync, existsSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-build.mjs :19 import { readdirSync, existsSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-node-floor.mjs :35 import { readFileSync, existsSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-publish-identity.cjs :15 const fs = require('fs');
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-test-gates.mjs :25 import { readFileSync, readdirSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-write-ops.mjs :23 import { readFileSync, readdirSync, existsSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/generate-api-surface.mjs :17 import { readFileSync, readdirSync, writeFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/generate-descriptor.mjs :20 import { readFileSync, writeFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/smoke-orphan.mjs :28 import { openSync, closeSync, mkdtempSync, rmSync, constants } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/smoke-reject.mjs :34 import { readFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/verify-mcpb.cjs :15 const fs = require('node:fs');
show 28 more
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/version-stamp.mjs :11 import { readFileSync, writeFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/version-sync.cjs :8 const fs = require('fs');
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/credentials.test.ts :2 import * as fs from 'node:fs/promises';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/registry.test.ts :2 import * as fs from 'node:fs/promises';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/coverage/baseline-drift.test.ts :18 import { readFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/factory/drive-patch.test.ts :13 import * as fs from 'node:fs/promises';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/factory/generator.test.ts :2 import * as fs from 'node:fs/promises';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/integration/setup.ts :10 import * as fs from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/server-json.test.ts :12 import { readFileSync } from 'node:fs';
  • fs (weak) aaronsb-google-workspace-mcp-ccdf507/src/__tests__/services/gmail/archive.test.ts :11 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/accounts/credentials.ts :1 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/accounts/registry.ts :1 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/coverage/baseline.ts :5 import * as fs from 'node:fs';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/executor/file-output.ts :10 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/executor/workspace.ts :9 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/factory/generator.ts :11 import { readFileSync, readdirSync } from 'node:fs';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/google/client.ts :19 import { createWriteStream } from 'node:fs';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/google/descriptor.ts :23 import { readFile } from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/lifecycle.ts :38 import { writeSync } from 'node:fs';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/node-floor.ts :15 import { writeSync } from 'node:fs';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/handlers/workspace.ts :9 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/scratchpad/adapters/import-doc.ts :9 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/scratchpad/adapters/import-drive.ts :6 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/scratchpad/adapters/import-email.ts :6 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/scratchpad/adapters/send-workspace.ts :6 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/server/scratchpad/handler.ts :8 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/services/drive/patch.ts :10 import * as fs from 'node:fs/promises';
  • fs aaronsb-google-workspace-mcp-ccdf507/src/services/gmail/mail.ts :10 import { readFile } from 'node:fs/promises';

1 more not shown — this panel samples each group; the count above is the real total.

shell / exec 8

  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/adr-103-differential-harness.mjs :25 import { execFile } from 'node:child_process';
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/api-descriptor/client.mjs :6 * This is what replaces `spawn(gws)`. It is the whole of what gws did for
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/check-test-gates.mjs :26 import { execFileSync } from 'node:child_process';
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/smoke-orphan.mjs :27 import { spawn, spawnSync } from 'node:child_process';
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/smoke-reject.mjs :33 import { spawnSync } from 'node:child_process';
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/smoke-start.mjs :24 import { spawn } from 'node:child_process';
  • shell (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/verify-mcpb.cjs :16 const { execSync } = require('node:child_process');
  • shell aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :3 import { exec, execFile } from 'node:child_process';

network 8

  • net (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/adr-103-discovery-dispatcher-spike.mjs :14 const res = await fetch(`https://www.googleapis.com/discovery/v1/apis/${service}/${version}/rest`);
  • net (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/adr-103-media-roundtrip-spike.mjs :29 const res = await fetch(`https://www.googleapis.com/discovery/v1/apis/${service}/${version}/rest`);
  • net (weak) aaronsb-google-workspace-mcp-ccdf507/docs/design-notes/adr-103-media-upload-spike.mjs :36 const res = await fetch(`https://www.googleapis.com/discovery/v1/apis/${service}/${version}/rest`);
  • net (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/generate-api-surface.mjs :107 const res = await fetch('https://www.googleapis.com/discovery/v1/apis');
  • net (weak) aaronsb-google-workspace-mcp-ccdf507/scripts/generate-descriptor.mjs :103 const res = await fetch(DIRECTORY);
  • net aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :1 import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';
  • net aaronsb-google-workspace-mcp-ccdf507/src/accounts/token-service.ts :56 const response = await fetch(GOOGLE_TOKEN_URL, {
  • net aaronsb-google-workspace-mcp-ccdf507/src/coverage/discover.ts :91 const response = await fetch(service.discoveryUrl);

secrets 1

  • secrets aaronsb-google-workspace-mcp-ccdf507/src/server/handlers/accounts.ts :160 const clientSecret = process.env.GOOGLE_CLIENT_SECRET;

install hooks 1

  • prepublishOnly aaronsb-google-workspace-mcp-ccdf507/package.json :24 npm run build

declared dependencies 10

  • @modelcontextprotocol/sdk@^1.27.1
  • sanitize-html@^2.17.6
  • yaml@^2.9.0
  • @types/node@^20.11.24
  • @types/sanitize-html@^2.16.1
  • @typescript-eslint/eslint-plugin@^7.18.0
  • @typescript-eslint/parser@^7.18.0
  • eslint@^8.56.0
  • typescript@^5.9.3
  • vitest@^4.1.10