A Model Context Protocol (MCP) server that provides authenticated access to Google Workspace APIs, offering integrated Authentication, Gmail, Calendar, and Drive functionality
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
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
- over-broad OAuth scope gmail.modify aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/auth.test.ts :41
scopes: ['https://www.googleapis.com/auth/gmail.modify'], - over-broad OAuth scope gmail.modify aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/credentials.test.ts :99
scopes: ['https://www.googleapis.com/auth/gmail.modify'], - over-broad OAuth scope gmail.modify aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/oauth.test.ts :33
expect(scopes).toContain('https://www.googleapis.com/auth/gmail.modify'); - over-broad OAuth scope https://www.googleapis.com/auth/drive aaronsb-google-workspace-mcp-ccdf507/src/__tests__/accounts/oauth.test.ts :39
expect(scopes).toContain('https://www.googleapis.com/auth/drive'); - over-broad OAuth scope gmail.modify aaronsb-google-workspace-mcp-ccdf507/src/__tests__/server/handlers/accounts.test.ts :89
scopes: ['https://www.googleapis.com/auth/gmail.modify', 'https://www.googleapis.com/auth/drive'], - over-broad OAuth scope gmail.modify aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :14
gmail: ['https://www.googleapis.com/auth/gmail.modify'], - over-broad OAuth scope https://www.googleapis.com/auth/drive aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :15
drive: ['https://www.googleapis.com/auth/drive'], - over-broad OAuth scope https://www.googleapis.com/auth/spreadsheets aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :17
sheets: ['https://www.googleapis.com/auth/spreadsheets'], - over-broad OAuth scope https://www.googleapis.com/auth/documents aaronsb-google-workspace-mcp-ccdf507/src/accounts/oauth.ts :18
docs: ['https://www.googleapis.com/auth/documents'],
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