{"_id":"@cl0ud95/google-workspace-mcp","_rev":"21-1200d641fa8c8b96c30c292b1ecb1f5f","name":"@cl0ud95/google-workspace-mcp","dist-tags":{"latest":"3.1.4"},"versions":{"1.0.0":{"name":"@cl0ud95/google-workspace-mcp","version":"1.0.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@1.0.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"a2105378e513c78c7ac0215f3739df5db29100cb","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-1.0.0.tgz","fileCount":18,"integrity":"sha512-QcNvDCofVShT63jNnowJVbhBfccwPf2DYawmTScroG4+gX4x3v4IWHWB2AxAjOYujfJcFK22av5OirxDvqpMhQ==","signatures":[{"sig":"MEUCIHV4jukghemihoTrRic+YgOOSU4nm0jgf7C7xRBTRoagAiEA8rZorJm24a527yMcRNcSQuhykLD3Ugi/kGJdJzcIKC0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48730},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a2db4f1bad4abc5dd5051141d59a5cb818406327","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via Apps Script proxy","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.0.0_1775052790955_0.3581361329521848","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cl0ud95/google-workspace-mcp","version":"1.1.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@1.1.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"bef14b3751ad80d6012c04963f9a78320a2c21a4","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-1.1.0.tgz","fileCount":18,"integrity":"sha512-w3wx6VSxiH1VkwigWvuceKy3k+Gh4RgKtz2uQ1Zdz4vIqnU7D6dCcB1pzWRBU1MszAMJIhVUAPheLE1C0viASA==","signatures":[{"sig":"MEYCIQDtOKM0lVvxATLQIf6YysMHF08Nsz1wWztEQCu1Wd1PBAIhANlANut780wPnNh9Jm/2puYoYHUbpnEM8QjDWzbWXSFJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49821},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a2db4f1bad4abc5dd5051141d59a5cb818406327","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via Apps Script proxy","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.1.0_1775054005821_0.7257013632358134","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@cl0ud95/google-workspace-mcp","version":"1.2.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@1.2.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"2d8c8a7566e2db35dc727e957f90dbe3a4440a44","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-1.2.0.tgz","fileCount":18,"integrity":"sha512-UaRjmi54780QjdwdEuQkL0VreHozuud1IrUpz8/Cf2J5LQGg2m4V1zC6OBTn+Lo//SIA19O/S0Z15aGWcrppyQ==","signatures":[{"sig":"MEUCIDpTZcGdaQ3xUr3GWpdODA+KaC3G4vBHghTQOhg27oUNAiEA30qZ18zi9/aMhrJ90hTWboBAxnFW7a6zwaD55lTb72o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51169},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a2db4f1bad4abc5dd5051141d59a5cb818406327","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via Apps Script proxy","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.2.0_1775290547679_0.11918808610500542","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@cl0ud95/google-workspace-mcp","version":"1.2.1","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@1.2.1","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"87eaba7516df238098455a283c95f06a30fe5103","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-1.2.1.tgz","fileCount":18,"integrity":"sha512-8zWoTfECUhRfv8TYAY4BwQY4CBaGshSjSE5/webuIysGB+h0BKhbD3sGdOUFjJxdHe08dtDsoxfKM4J0oeVN/Q==","signatures":[{"sig":"MEYCIQDVFT0/+gwJ5IgHgg53Ak8BRxs/e+hEvMlKXijzIShWMgIhAPs6iU3h9XXBhwyY02ddk4x13ls/jwnfq3KK7FP+FbhT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51454},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"a2db4f1bad4abc5dd5051141d59a5cb818406327","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via Apps Script proxy","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.2.1_1775290996786_0.15984009077032257","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@cl0ud95/google-workspace-mcp","version":"1.2.2","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@1.2.2","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"3354103904ac35aefff5eee86be8a4847a645926","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-1.2.2.tgz","fileCount":18,"integrity":"sha512-ttI9aRRwvmzSSRgmqMvc5JPkHKWBhiJWxDbjcaVCLB+yJx+5N/r7yzeksUME5Uf+xzEtpPyuD9OlXzguUoi77Q==","signatures":[{"sig":"MEQCIEhoeP3kzc/LhOAp0WRUHPEwXBGBsLWM8kYNMRjigCDCAiAQLfw2DobWskxmv8wDci+HfBtLDxbMNq9jJWWMZAVUxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57460},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"929fc23765469d728dcea803edc76528847ed5a9","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via Apps Script proxy","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_1.2.2_1775632073024_0.528933523636542","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@cl0ud95/google-workspace-mcp","version":"2.0.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.0.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"16ac0b04ebd2561f81a0f8bed90192797b3fe5d2","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.0.0.tgz","fileCount":22,"integrity":"sha512-rUeInrbgiFgblIyN5t+DwYgJ6Y7NwRCLsNxsDObS8YKgF/4R1D6q2biGGnIO8piftdu4RPU+j/kgU+IzUCy/tA==","signatures":[{"sig":"MEUCIQCOi3CPKvDvTYdCOASPbLsN8OomLVnrUsDMOa8TORjFogIgDbdZTgHACuAzh4YGhr99z0eguYk9XSi9U9JxvzbBHsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130139},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.0.0_1776275389231_0.18404870884151125","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@cl0ud95/google-workspace-mcp","version":"2.0.1","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.0.1","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"923632d7fbc9071c5abedfc88672326e7ccf9b53","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.0.1.tgz","fileCount":22,"integrity":"sha512-y7inRI+NO9gA1AVsElVX9sKdAekjwIOR85CyuhjkRxXET45oVFMy0sw/ZBmQd4hwebPP4U8jLYwOsBe2kYcD/w==","signatures":[{"sig":"MEQCIFqz8xxVvxqYkaoUWUvH/AOAbCYpwHHGD4fsGZYk4476AiA7iUPkNddvPJK2Tj5sa0RjT0S6HTOU3ubPhns5Yee5YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.0.1_1776282061929_0.6663547665703928","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@cl0ud95/google-workspace-mcp","version":"2.0.2","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.0.2","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"acdde6ed3ddfa8fce50881149c17acbc53b312f5","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.0.2.tgz","fileCount":22,"integrity":"sha512-CioxyX28S1jGQbzeaLzzd8kSFJeJCsc9Voc8Hspzld+9+vKmiIvj6x9v8JAfXmyfbD8WmIkq788QX28KP1GgWQ==","signatures":[{"sig":"MEUCIBL0hbYbA9tClnonlVg+zIggPl3pZXk2G1RKsesvn2HBAiEArKLS1pvLD56a+EHa4Bpn1RLIiq1Y/LgNShHw3Bk2XsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.0.2_1776282293056_0.6638583315936393","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@cl0ud95/google-workspace-mcp","version":"2.0.3","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.0.3","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"00a40ed19695fd3ab55094de68eb33d8ae17f481","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.0.3.tgz","fileCount":22,"integrity":"sha512-j4gH8QlguHlsrrEM60sFfjxqi+GLTmf0x8oU8vJvGMD8WJQrlXomFRlVNpESIlDfRqn08Z0OlDGgmtpxJMPP8Q==","signatures":[{"sig":"MEQCIHRd4aaW5lfozVfTYAAgLdFyNFakS2SIApXmWWwFPW1xAiAVbsvPGUPX3u8ezBiytqynnuMOFgDSm8utSZjbhTak5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.0.3_1776283570664_0.5026859269414383","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@cl0ud95/google-workspace-mcp","version":"2.1.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.1.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"62437d26c521751bc21b9d0503d369d5ac79ba83","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.1.0.tgz","fileCount":22,"integrity":"sha512-z7DjfPc9+eNKHJjzySUVgHJQw8y2T9c1CCHsbV+0Z9arCRE/Gd/7ZbIlqvJBP5+Lf8UJk27o9UUsDg+4dNZGgg==","signatures":[{"sig":"MEUCIDkeHMOYJsPOAyzPy8vK4064NJmC1gjP0S6d/aHZ92IjAiEA4S87wXl6Nw11OVAQHZJEjP54BcidXF3BAHgflyUhUno=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.1.0_1776317643470_0.321712388181713","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@cl0ud95/google-workspace-mcp","version":"2.1.1","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.1.1","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"493643ca4623324010477642617242784f10d769","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.1.1.tgz","fileCount":22,"integrity":"sha512-EmO7UiZqbpcNe/sTkLnW+eowTO5IAxNeRuXNN2Y8k165mZXry6Yv0Xg9ekOdGSFORVICmdZfMkSmVPoqR6heoQ==","signatures":[{"sig":"MEUCID1efCs1bL8FLhHS7hfo/7oTHiy77Xqg69N7+r6HpCWQAiEAkAZT2slXNmo6m8FC3lxFL3NezuQeOCKgGNjhQfzIA0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130612},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.1.1_1776318544758_0.7649305603699319","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@cl0ud95/google-workspace-mcp","version":"2.2.0","keywords":["mcp","google","drive","sheets","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@2.2.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"0edfa3bfffb27409ebe83254772c27f5b133d17d","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-2.2.0.tgz","fileCount":22,"integrity":"sha512-h26PhhZ6KvL5C1krK0ih5b5FCUVwbPYGs94maWvF3QKS6JyC4UHoeU8HHukByy79IVwKSCfyEniV779HNGc5pQ==","signatures":[{"sig":"MEUCIAhJkalgdCskqWeVc3GNbON0c1YdXEJOLExkmBC6TthsAiEA2uTZbHpKk9MAMRaSXaL4cM7rk+PfqzBDjykSsPnU1To=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":134146},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"4db1f51ef9c3829e22963a70a53870d6223282b3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Drive and Sheets via googleapis","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_2.2.0_1776354823006_0.08003366135947942","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@cl0ud95/google-workspace-mcp","version":"3.0.0","keywords":["mcp","google","drive","sheets","gmail","calendar","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.0.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"ae3a062f13f32608765d2df1af9d03def29d809d","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.0.0.tgz","fileCount":22,"integrity":"sha512-ltMGiRDlVPrErrQzfuncHxWMDAaDdE8b5KTQChEAt+QjHdEKW63Wxcj4l2PvpkAFDcG3AG8rIsfa1GFvZ5t7Nw==","signatures":[{"sig":"MEYCIQDpx/U5P3Sl+XV+9HXKU6Ri+Vnx3vef6PP0kjeVe3TPAQIhAI+KrUT7cfF6Db+19PESGgptCqIsVx42HJoW37JAPG5K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144287},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"dd60afa3f01b54a0c43d106a218d4523560837d2","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar) with Furnace v2 onboarding and incremental scope consent","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.0.0_1776611714908_0.4329312978590578","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@cl0ud95/google-workspace-mcp","version":"3.0.1","keywords":["mcp","google","drive","sheets","gmail","calendar","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.0.1","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"90c92d1206209ca52a350e101f1d388db304d59c","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.0.1.tgz","fileCount":22,"integrity":"sha512-6g9moBN3gRcxv1/1txb2aBk9GtvbJyhJxQIDzzKjyiQ/l2yw1N4QBOP4fgQ4K+waVnO0OEUw41m5YHm2E/dBUA==","signatures":[{"sig":"MEUCIHFUk69e6SLEXo5tviRDpZd8mUqJchIXRbFVOqQ1oKilAiEAmN+HNRGv+9ATNajgUtWA+FVuyyeIx6v2epqCXBKAQxQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":144417},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"dd60afa3f01b54a0c43d106a218d4523560837d2","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar) with Furnace v2 onboarding and incremental scope consent","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.0.1_1776617232256_0.7271857449772963","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@cl0ud95/google-workspace-mcp","version":"3.1.0","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.1.0","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"1ea79bdbf5408339afcafaa6fe0008fe93bb702d","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.1.0.tgz","fileCount":24,"integrity":"sha512-t2DQGU+W7SzxzyFZSWSMFhw3OeKbQqInpFq22F4Oyek7582hadlgrrEm1+mVQrbLDpLkT6QhyrsKtWLeOvkSfQ==","signatures":[{"sig":"MEMCHy2Pr8XS0dOuJjH8/pYAfRdq8qhRd6ywrMeCK6+dhk8CIDGXck5Qk3UJY2/O1WpX9JokzP9JhqDfnC6F0oF3IBFa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168735},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"dd60afa3f01b54a0c43d106a218d4523560837d2","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.1.0_1776682062966_0.364002199847542","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@cl0ud95/google-workspace-mcp","version":"3.1.1","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.1.1","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"834491c61f8c89600dbf0c6913c41b5637820ee5","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.1.1.tgz","fileCount":24,"integrity":"sha512-Zlwb5a2GJr8sy0GBvOvviiy53opadefG1lpEpfxqzTrco5Od/YugXkV3G51od3ZEHIBiXP43E/+bkwDoM9RoMQ==","signatures":[{"sig":"MEQCIGo9koG86T7oHkzWDvQpGTLtk/a7vYGUDXDACVVzVsoqAiBhon2VRtRLLXAKft3ipI3OkXRxQSbEpcf4Ac2b5MgRPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168753},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"dd60afa3f01b54a0c43d106a218d4523560837d2","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.1.1_1776682839285_0.94203476036682","host":"s3://npm-registry-packages-npm-production"}},"3.1.2":{"name":"@cl0ud95/google-workspace-mcp","version":"3.1.2","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.1.2","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"0220ebccaf3f8c4d16fe6a5cdf5e110838d29605","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.1.2.tgz","fileCount":24,"integrity":"sha512-+hmtSC4POvHJTuilRJN20S0TP4css+ix+3L+z2pUha1CyS+PX5eq3r7Y8FYqP+xt5S/tV1JOnE9Nzjqd2NQp4w==","signatures":[{"sig":"MEQCICQju0EyskQ7e5CFt203tfpmU/H9kjwn2W8M3BogTdkFAiAOhhzZvYvnmZwpYi787nXRY9aBolXem5ZZPx7BsnJA+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168753},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"58dfdb0baba6292321f78e6e90f0150e7fc5edc3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.1.2_1776690189384_0.5080700443023987","host":"s3://npm-registry-packages-npm-production"}},"3.1.3":{"name":"@cl0ud95/google-workspace-mcp","version":"3.1.3","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.1.3","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"6215d4304649295fa1a97c6c9a72dc281a3346b6","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.1.3.tgz","fileCount":24,"integrity":"sha512-XsiLwx5K2U4rY8JJH4qJDf9+WksLAU2iPL4t9IwoK7auvZA0ijsuwWymrGaBB4xwK1arZvcsbt6h9FBdfQXlKw==","signatures":[{"sig":"MEUCIE3N+iRWeiM6O1acsQMcswT9utIMC0NBd1FUMFXq2A8nAiEAvlqBUm1L85YY1xOzcut6iOiFLDyeWAlNjBzKxPf714Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168757},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"58dfdb0baba6292321f78e6e90f0150e7fc5edc3","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.1.3_1776691236979_0.7721071621772753","host":"s3://npm-registry-packages-npm-production"}},"3.1.4":{"name":"@cl0ud95/google-workspace-mcp","version":"3.1.4","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"license":"MIT","_id":"@cl0ud95/google-workspace-mcp@3.1.4","maintainers":[{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"}],"bin":{"google-workspace-mcp":"dist/index.js"},"dist":{"shasum":"de9d683260fc42b2e04c33b81cab6d03a2c0d6ac","tarball":"https://registry.npmjs.org/@cl0ud95/google-workspace-mcp/-/google-workspace-mcp-3.1.4.tgz","fileCount":24,"integrity":"sha512-zcdl1Pn2syOY0jfuf9oBHz07cNr5XLla4COf3T3tBpuEg7YCvDFxl8jmEpNGFfpXklesDifFtXPDE5Mp4IzxXg==","signatures":[{"sig":"MEUCIAG3YQQWNKjewAuaU/MtJ6YRQEjhwRlO5cydoZFH/Yk/AiEAyrZIYlwNUqXH3eYknf0ysHXJtQ9ajDh6mvZTiWpeqdM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170211},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"gitHead":"9a267da917cb82c8f3476b10c85d9d4368dc8551","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"cl0ud95","email":"wayne.hoon@ignitive.ai"},"_npmVersion":"11.6.2","description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"^3.24.2","googleapis":"^144.0.0","@modelcontextprotocol/sdk":"^1.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","typescript":"^5.7.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/google-workspace-mcp_3.1.4_1776699738059_0.4238136069961349","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-01T14:13:10.567Z","modified":"2026-05-27T05:53:43.099Z","1.0.0":"2026-04-01T14:13:11.095Z","1.1.0":"2026-04-01T14:33:25.956Z","1.2.0":"2026-04-04T08:15:47.819Z","1.2.1":"2026-04-04T08:23:16.929Z","1.2.2":"2026-04-08T07:07:53.219Z","2.0.0":"2026-04-15T17:49:49.361Z","2.0.1":"2026-04-15T19:41:02.079Z","2.0.2":"2026-04-15T19:44:53.205Z","2.0.3":"2026-04-15T20:06:10.823Z","2.1.0":"2026-04-16T05:34:03.698Z","2.1.1":"2026-04-16T05:49:04.922Z","2.2.0":"2026-04-16T15:53:43.153Z","3.0.0":"2026-04-19T15:15:15.052Z","3.0.1":"2026-04-19T16:47:12.487Z","3.1.0":"2026-04-20T10:47:43.101Z","3.1.1":"2026-04-20T11:00:39.438Z","3.1.2":"2026-04-20T13:03:09.594Z","3.1.3":"2026-04-20T13:20:37.127Z","3.1.4":"2026-04-20T15:42:18.203Z"},"license":"MIT","keywords":["mcp","google","drive","sheets","gmail","calendar","tasks","claude","ai"],"description":"MCP server for Google Workspace (Drive, Sheets, Gmail, Calendar, Tasks) with OAuth and service account auth","maintainers":[{"email":"wayne.hoon@ignitive.ai","name":"ignitive-solutions"},{"email":"tanweihao94@gmail.com","name":"demitycho"}],"readme":"# Google Workspace MCP Server\n\nMCP server providing Google Drive, Sheets, Gmail, Calendar, and Tasks access via `googleapis`. Supports two auth modes: **OAuth** (per-user consent via control plane) and **Service Account** (domain-wide delegation for business clients).\n\n## Version\n\n**3.1.1** — Service account auth, Google Tasks support, Gmail modify scope, scope-aware error handling.\n\n## Architecture\n\n### OAuth Mode\n\n```mermaid\nflowchart TB\n    subgraph CP[\"Furnace Control Plane\"]\n        AuthAPI[\"/internal/google/auth-url<br/>/internal/google/tokens\"]\n        Onboard[\"/onboarding/google/callback\"]\n        DB[\"client_mcp_configs<br/>(encrypted tokens)\"]\n        AuthAPI --> DB\n        Onboard --> DB\n    end\n\n    subgraph Container[\"Agent Container\"]\n        MCP[\"MCP Server (this package)\"]\n        OAuth2[\"google-auth-library<br/>OAuth2Client\"]\n        APIs[\"googleapis<br/>(Drive/Sheets/Gmail/Calendar/Tasks)\"]\n\n        MCP -->|\"fetch tokens<br/>request auth URL\"| AuthAPI\n        MCP --> OAuth2\n        MCP --> APIs\n        APIs -->|\"API calls\"| Google[\"Google Workspace APIs\"]\n        OAuth2 -->|\"refresh token<br/>rotation\"| AuthAPI\n    end\n\n    User[\"User Browser\"] -->|\"consent\"| Onboard\n\n    style CP fill:#e1f5fe\n    style Container fill:#f3e5f5\n    style DB fill:#fff9c4\n    style Google fill:#e8f5e9\n```\n\n### Service Account Mode\n\n```mermaid\nflowchart TB\n    subgraph Container[\"Agent Container\"]\n        MCP[\"MCP Server (this package)\"]\n        JWT[\"google-auth-library<br/>JWT Client\"]\n        APIs[\"googleapis<br/>(Drive/Sheets/Gmail/Calendar/Tasks)\"]\n\n        MCP --> JWT\n        MCP --> APIs\n        APIs -->|\"API calls (impersonating user)\"| Google[\"Google Workspace APIs\"]\n        MCP -->|\"scope check (once)\"| TokenInfo[\"Google Tokeninfo API\"]\n    end\n\n    SA[\"Service Account JSON<br/>(mounted by hub)\"] -->|\"key file\"| JWT\n\n    style Container fill:#f3e5f5\n    style Google fill:#e8f5e9\n    style TokenInfo fill:#fff9c4\n```\n\n### How It Works — OAuth\n\n1. **Agent calls MCP tool** (e.g., `drive_list_files`)\n2. **MCP checks scopes** — calls control plane to fetch tokens, verifies the token has the required scopes\n3. **Has scopes** — refreshes access token if expired, executes API call\n4. **Missing scopes** — requests auth URL from control plane, returns `AUTH_REQUIRED` with URL and missing scope info\n5. **Agent sends URL to user** — user taps, Google shows only new permissions (incremental consent)\n6. **Control plane callback** — exchanges code, stores tokens encrypted in `client_mcp_configs`\n7. **Agent retries** — MCP fetches fresh tokens from control plane, succeeds\n\n### How It Works — Service Account\n\n1. **Agent calls MCP tool**\n2. **First call only** — MCP reads service account key, creates JWT client with subject impersonation, authorizes, and verifies granted scopes via Google's tokeninfo endpoint\n3. **Subsequent calls** — reuses initialized client (no refresh needed, JWT tokens are self-signed)\n4. **If scopes are missing** — returns clear error naming missing scopes and service account email (admin needs to update delegation)\n\n## Environment Variables\n\n### Shared\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `GOOGLE_AUTH_MODE` | No | `oauth` | Auth mode: `oauth` or `service_account` |\n| `ENCRYPTION_KEY` | Yes | — | Shared secret for platform API authentication |\n| `CLIENT_ID` | Yes | — | Client identifier (set by hosting platform at runtime) |\n| `AGENT_CONFIG_ID` | Yes | — | Agent identifier (set by hosting platform at runtime) |\n| `GOOGLE_ROOT_FOLDER_ID` | No | — | Drive folder ID scoping Drive operations |\n| `GOOGLE_SERVICES` | No | `drive,sheets,gmail,calendar,tasks` | Comma-separated enabled services |\n| `GOOGLE_READONLY` | No | `false` | If `true`, only read tools for Drive/Sheets |\n\n### OAuth Mode (required when `GOOGLE_AUTH_MODE=oauth`)\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `GOOGLE_CLIENT_ID` | Yes | OAuth client ID from GCP Console |\n| `GOOGLE_CLIENT_SECRET` | Yes | OAuth client secret from GCP Console |\n| `GOOGLE_AUTH_URL` | Yes | Platform base URL for token management and auth URL generation |\n\n### Service Account Mode (required when `GOOGLE_AUTH_MODE=service_account`)\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `GOOGLE_SERVICE_ACCOUNT_PATH` | Yes | Path to service account JSON key file |\n| `GOOGLE_IMPERSONATE_USER` | Yes | Email address to impersonate (domain-wide delegation) |\n\n## Scope-Aware Auth\n\n### OAuth Mode\n\nEach tool declares required OAuth scopes. Before executing, the MCP verifies the stored token covers those scopes. If not:\n\n```json\n{\n  \"error\": \"AUTH_REQUIRED\",\n  \"auth_url\": \"https://accounts.google.com/o/oauth2/v2/auth?...\",\n  \"missing_scopes\": [\"https://www.googleapis.com/auth/gmail.compose\"],\n  \"current_scopes\": [\"https://www.googleapis.com/auth/drive\"],\n  \"message\": \"Google Workspace access required. Missing scopes: ...\"\n}\n```\n\nScopes are requested for all configured services upfront (one consent screen). Re-auth is only required if `GOOGLE_SERVICES` is expanded to include a new service.\n\n### Service Account Mode\n\nOn first tool call, the MCP verifies granted scopes against requested scopes via Google's tokeninfo endpoint. If the Workspace admin didn't delegate a required scope:\n\n```\nError: Service account (sa-name@project.iam.gserviceaccount.com) is missing delegated scopes:\nhttps://www.googleapis.com/auth/gmail.compose. Ask your Workspace admin to grant domain-wide\ndelegation for these scopes in the Admin Console.\n```\n\n### `check_google_auth` Tool\n\nProactively check connection status without triggering an error:\n\n```\nInput: { requested_scopes: \"drive,sheets\" }\nOutput: {\n  \"connected\": true,\n  \"current_scopes\": [\"https://www.googleapis.com/auth/drive\", ...],\n  \"missing_scopes\": [],\n  \"auth_url\": null\n}\n```\n\n## Token Management (OAuth mode only)\n\n- **Fetch**: MCP calls `GET /internal/google/tokens` on first API call\n- **Refresh**: Uses `google-auth-library`'s `OAuth2Client` with 60-second proactive buffer\n- **Persist**: Only persists back to control plane when refresh token rotates (rare)\n- **Re-auth**: After onboarding, MCP re-fetches from control plane — no container restart needed\n\n## Tools (51 total)\n\n### Meta\n\n| Tool | Description |\n|------|-------------|\n| `check_google_auth` | Check connection status, missing scopes, get auth URL |\n\n### Drive (16 tools)\n\n| Tool | R/W | Description |\n|------|-----|-------------|\n| `drive_list_files` | R | List files in folder (paginated) |\n| `drive_list_folders` | R | List only folders in folder |\n| `drive_get_file` | R | Get file metadata |\n| `drive_read_file` | R | Read text file content (truncates at 1MB) |\n| `drive_download` | R | Get download URL for binary files |\n| `drive_search` | R | Search files by name in root tree |\n| `drive_tree` | R | Get folder tree structure |\n| `drive_create_folder` | W | Create folder |\n| `drive_create_file` | W | Create text file |\n| `drive_update_file` | W | Update file content |\n| `drive_move_file` | W | Move file to different folder |\n| `drive_rename_file` | W | Rename file/folder |\n| `drive_delete_file` | W | Trash file/folder |\n| `drive_share_file` | W | Set link sharing (private/anyone/anyone_with_link) |\n| `drive_add_collaborator` | W | Add user as collaborator |\n| `drive_remove_collaborator` | W | Remove collaborator |\n| `drive_get_permissions` | R | Get file permissions and collaborators |\n\n### Sheets (12 tools)\n\n| Tool | R/W | Description |\n|------|-----|-------------|\n| `sheets_list` | R | List all spreadsheets in root folder |\n| `sheets_get_info` | R | Get spreadsheet metadata and sheets |\n| `sheets_get_sheet` | R | Get specific sheet/tab metadata |\n| `sheets_read_cell` | R | Read single cell |\n| `sheets_read_range` | R | Read range (truncates at 10k rows) |\n| `sheets_read_all` | R | Read entire sheet |\n| `sheets_write_cell` | W | Write single cell |\n| `sheets_write_range` | W | Write 2D array to range |\n| `sheets_append_row` | W | Append row to end of sheet |\n| `sheets_clear_range` | W | Clear range values |\n| `sheets_create_sheet` | W | Create new sheet/tab |\n| `sheets_delete_sheet` | W | Delete sheet/tab |\n| `sheets_create_spreadsheet` | W | Create new spreadsheet file |\n\n### Gmail (7 tools)\n\n| Tool | R/W | Description |\n|------|-----|-------------|\n| `gmail_search_messages` | R | Search messages with query |\n| `gmail_read_message` | R | Get full message with decoded body |\n| `gmail_read_thread` | R | Get all messages in thread |\n| `gmail_send_message` | W | Send email (HTML or plain text) |\n| `gmail_create_draft` | W | Create email draft |\n| `gmail_modify_labels` | W | Add/remove labels on message |\n| `gmail_list_labels` | R | List all labels |\n\n### Calendar (8 tools)\n\n| Tool | R/W | Description |\n|------|-----|-------------|\n| `gcal_list_calendars` | R | List all calendars |\n| `gcal_list_events` | R | List events in calendar |\n| `gcal_get_event` | R | Get single event details |\n| `gcal_create_event` | W | Create new event |\n| `gcal_update_event` | W | Update existing event |\n| `gcal_delete_event` | W | Delete event |\n| `gcal_respond_to_event` | W | Accept/decline/tentative response |\n\n### Tasks (8 tools)\n\n| Tool | R/W | Description |\n|------|-----|-------------|\n| `gtasks_list_tasklists` | R | List all task lists |\n| `gtasks_get_tasklist` | R | Get a specific task list |\n| `gtasks_list_tasks` | R | List tasks in a task list (filter by completion/due date) |\n| `gtasks_get_task` | R | Get a specific task |\n| `gtasks_create_task` | W | Create a new task |\n| `gtasks_update_task` | W | Update task (title, notes, status, due date) |\n| `gtasks_delete_task` | W | Delete a task |\n| `gtasks_clear_tasks` | W | Clear all completed tasks from a list |\n\n## Service Filtering\n\nOnly register tools the agent needs — saves context tokens:\n\n```json\n\"GOOGLE_SERVICES\": \"sheets\"               // Only Sheets tools\n\"GOOGLE_SERVICES\": \"drive,sheets\"         // Drive + Sheets\n\"GOOGLE_SERVICES\": \"drive,sheets,gmail\"   // Drive + Sheets + Gmail\n```\n\n## OAuth Scopes\n\n| Service | Scope URLs |\n|---------|-----------|\n| Drive | `https://www.googleapis.com/auth/drive` |\n| Sheets | `https://www.googleapis.com/auth/spreadsheets` |\n| Gmail | `https://www.googleapis.com/auth/gmail.compose`, `https://www.googleapis.com/auth/gmail.modify` |\n| Calendar | `https://www.googleapis.com/auth/calendar` |\n| Tasks | `https://www.googleapis.com/auth/tasks` |\n\n## Installation\n\n```bash\nnpx -y @cl0ud95/google-workspace-mcp\n```\n\n## Development\n\n```bash\nnpm install\nnpm run build      # Compile TypeScript\nnpm run dev        # Run with tsx\nnpm run typecheck  # Type check only\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}