Mcp Server Google Workspace — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Server Google Workspace (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server for Google Workspace integration, providing tools for Gmail, Google Calendar, and Google Drive access.
npm install mcp-server-google-workspace
# or
pnpm add mcp-server-google-workspacegit clone <repo-url>
cd mcp-server-google-workspace
pnpm install
pnpm buildThe MCP server reads Google OAuth credentials from environment variables:
# .env
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REFRESH_TOKEN=your_refresh_token
GOOGLE_ACCESS_TOKEN=your_access_token # optionalFor platforms serving multiple users, the host application should:
This keeps the MCP server simple and delegates credential management to the host application.
#### gmail_list_emails List recent emails from Gmail inbox.
Parameters:
hours (number, optional): Hours to look back (default: 24)maxResults (number, optional): Max emails to return (default: 50)query (string, optional): Gmail search queryExample:
{
"hours": 168,
"maxResults": 50,
"query": "from:[email protected]"
}#### gmail_read_email Read full content of a specific email.
Parameters:
emailId (string, required): Gmail message ID#### gmail_search_emails Search emails with Gmail query syntax.
Parameters:
query (string, required): Search querymaxResults (number, optional): Max results (default: 50)Query Examples:
"from:[email protected] subject:meeting""has:attachment after:2025/11/01""is:unread label:important"#### calendar_list_calendars List all accessible calendars, including shared calendars.
Parameters:
showHidden (boolean, optional): Include hidden calendars (default: false)minAccessRole (string, optional): Minimum access role filter (freeBusyReader, reader, writer, owner)Example:
{
"showHidden": false,
"minAccessRole": "reader"
}Response: Returns a list of calendars with their IDs, names, access roles, and other metadata. Use the calendar id field for other calendar operations.
#### calendar_list_events List calendar events for a date range. Returns events with timezone information.
Parameters:
calendarId (string, optional): Calendar ID (default: 'primary'). Use calendar_list_calendars to get IDs of shared calendars.date (string, optional): Start date (YYYY-MM-DD), default: todaydays (number, optional): Number of days (default: 1)maxResults (number, optional): Max events (default: 50)Response: Each event includes startTimeZone and endTimeZone fields, making it easy to handle events across different timezones (e.g., ET vs UTC).
#### calendar_create_event Create a new calendar event with proper timezone support.
Parameters:
calendarId (string, optional): Calendar ID (default: 'primary'). Use calendar_list_calendars to get IDs of shared calendars.summary (string, required): Event titlestart (string, required): Start time (ISO 8601)end (string, required): End time (ISO 8601)timeZone (string, optional): IANA timezone (e.g., "America/New_York", "America/Los_Angeles", "UTC"). If not specified, uses the calendar's default timezone.description (string, optional): Event descriptionlocation (string, optional): Event locationattendees (array, optional): Attendee emailsExamples:
Creating event in EST timezone:
{
"calendarId": "primary",
"summary": "Team Meeting",
"start": "2025-11-02T10:00:00",
"end": "2025-11-02T11:00:00",
"timeZone": "America/New_York",
"description": "Quarterly review",
"attendees": ["[email protected]"]
}Creating event in UTC (default if not specified):
{
"summary": "Team Meeting",
"start": "2025-11-02T15:00:00Z",
"end": "2025-11-02T16:00:00Z"
}Add to your Claude Desktop configuration:
{
"mcpServers": {
"google-workspace": {
"command": "npx",
"args": ["-y", "mcp-server-google-workspace"],
"env": {
"GOOGLE_CLIENT_ID": "your_client_id",
"GOOGLE_CLIENT_SECRET": "your_client_secret",
"GOOGLE_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}For multi-user platforms, decrypt credentials and inject them when starting the server:
import { Agent } from '@anthropic-ai/claude-agent-sdk';
// Your backend decrypts credentials from database
const credentials = await decryptUserCredentials(userId);
const agent = new Agent({
mcpServers: [{
command: 'node',
args: ['path/to/mcp-server-google-workspace/dist/index.js'],
env: {
GOOGLE_CLIENT_ID: credentials.clientId,
GOOGLE_CLIENT_SECRET: credentials.clientSecret,
GOOGLE_REFRESH_TOKEN: credentials.refreshToken,
}
}]
});# Install dependencies
pnpm install
# Build
pnpm build
# Watch mode
pnpm watch
# Run locally
pnpm devnpx @modelcontextprotocol/inspector node dist/index.jscp .env.example .env
# Edit .env with your credentials
pnpm devTo get Google OAuth credentials:
Contributions welcome! Please feel free to submit a Pull Request.
MIT
iskifogl
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.