Unified Cloud MCP
Reads authorized Fitbit/Pixel health categories through Google Health and performs explicitly confirmed writes without storing health values.
Allows searching emails, applying/removing labels, archiving, marking unread, moving threads to trash, and managing vacation responders.
Provides access to Google cloud services through account aliases, including Gmail, Drive, Calendar, Contacts, Photos, and Google Health, with OAuth-based authentication.
Allows listing, creating, updating, and deleting events in the primary calendar.
Allows searching files, creating folders, renaming/moving files, and moving files to trash.
Allows listing, reading, creating, and permanently deleting notes owned by the configured Workspace user, using service-account domain-wide delegation.
Launches an interactive picker session and reads only the photos/videos the user explicitly selects.
Lists and reads Markdown notes in a configured Google Drive vault, and creates or replaces notes when enabled, rejecting file IDs outside the vault.
Groups Slack workspaces under aliases, lists conversations and users, searches messages, reads channels and threads, and posts/updates/deletes messages or reactions when configured, with encrypted token storage.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Unified Cloud MCPSearch Gmail and OneDrive for recent invoices."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unified Cloud MCP
A remote MCP server for Cloudflare Workers that lets ChatGPT, Claude, and other MCP clients read and organize multiple independent Google and Microsoft cloud accounts without copying data between them.
This repository is a sanitized portfolio snapshot. Deployment identifiers, account details, and organization-specific configuration have been replaced with examples. Write-capable features are disabled by default.
Providers and tools
Gmail: search, apply/remove labels, archive, mark read/unread, and move threads to Trash
Gmail settings: read, schedule, update, enable, and disable vacation responders
Drive: search, create folders, rename/move files, and move files to Trash
Calendar: list, create, update, and delete primary-calendar events
Contacts: search, create, update, and permanently delete contacts
Photos: launch an interactive Picker session and read only the photos/videos the user explicitly selects
Google Health: read all authorized Fitbit/Pixel health categories and perform explicitly confirmed writes without storing health values in the audit log
Workspace Google Keep
List, read, and create notes owned by the configured Workspace user
Permanently delete notes only with exact confirmation
Authenticate through a service account with domain-wide delegation, independently from normal Google OAuth
Microsoft
OneDrive: search, create folders, rename/move items, and delete items (normally recoverable through the OneDrive recycle bin)
Obsidian
List and read Markdown notes in one configured Google Drive vault
Create and replace notes when separately enabled
Reject file IDs outside the configured vault
Personal finance API
Read allowlisted routes exposed by your Cloudflare-hosted finance app
Create, edit, and delete finance records when explicitly enabled
Slack
Group Slack workspaces under aliases such as
organization-aandorganization-bList conversations and users; search messages; read channels and threads
Post, update, and delete messages and add/remove reactions when separately enabled
Encrypt Slack user tokens before D1 storage
Google and Microsoft tools require an explicit account alias. Destructive operations require an exact action-specific confirmation phrase, and batch limits are enforced server-side.
Security model
OAuth refresh tokens are encrypted with AES-256-GCM before D1 storage.
Provider tokens never leave the Worker.
Setup endpoints require
ADMIN_SETUP_TOKEN.MCP requests accept either OAuth 2.1 access tokens or the legacy
MCP_BEARER_TOKEN.OAuth authorization requires the admin setup token and uses PKCE, dynamic client registration, and hashed token storage in Workers KV.
Gmail label changes are capped at 50 threads; Trash operations at 10 threads.
Permanent Gmail deletion and cross-account copying are not exposed.
Email sending, vacation responder writes, Keep writes, Google Health writes, contact writes, file-content writes, and finance writes use independent server-side enable flags.
Contact writes require exact confirmation and are audit logged.
Finance requests are restricted to configured route prefixes; write operations are audit logged.
Write confirmation is checked by the Worker, not merely requested in the prompt.
Existing Google accounts must be reconnected after new Google scopes are deployed. Photos only exposes an interactive picker; it cannot silently search a user's full Photos library.
Deploy
npm install
npx wrangler d1 create unified-cloud-mcp
# Put the database ID in wrangler.jsonc
npx wrangler kv namespace create OAUTH_KV
# Put the KV namespace ID in wrangler.jsonc
npm run db:migrate:remoteCreate OAuth apps with these callbacks:
https://YOUR-WORKER.workers.dev/oauth/google/callback
https://YOUR-WORKER.workers.dev/oauth/microsoft/callbackEnable Gmail, Google Drive, Google Calendar, People, Google Photos Picker, Google Photos Library, and Google Keep APIs. The normal Google OAuth app requests Gmail, Drive, Calendar, Contacts, Photos Picker, and app-created Photos Library scopes. Keep instead uses Workspace domain-wide delegation. The Microsoft app should accept personal and organizational accounts and grant delegated User.Read and Files.ReadWrite permissions plus openid profile email offline_access.
Configure secrets:
openssl rand -base64 32
npx wrangler secret put GOOGLE_CLIENT_ID
npx wrangler secret put GOOGLE_CLIENT_SECRET
npx wrangler secret put GOOGLE_KEEP_SERVICE_ACCOUNT_EMAIL
npx wrangler secret put GOOGLE_KEEP_PRIVATE_KEY
npx wrangler secret put MICROSOFT_CLIENT_ID
npx wrangler secret put MICROSOFT_CLIENT_SECRET
npx wrangler secret put TOKEN_ENCRYPTION_KEY_BASE64
npx wrangler secret put ADMIN_SETUP_TOKEN
npx wrangler secret put MCP_BEARER_TOKEN
npx wrangler secret put SLACK_ORG_A_CLIENT_ID
npx wrangler secret put SLACK_ORG_A_CLIENT_SECRET
npx wrangler secret put SLACK_ORG_B_CLIENT_ID
npx wrangler secret put SLACK_ORG_B_CLIENT_SECRET
npx wrangler secret put PUBLIC_BASE_URL
npx wrangler secret put FINANCE_APP_API_TOKEN
# Or use FINANCE_APP_API_KEY and FINANCE_APP_API_KEY_HEADER.
npm run deploySet non-secret Worker variables for optional autonomous operations:
ENABLE_AUTONOMOUS_EMAIL_SEND=false
EMAIL_ALLOWED_RECIPIENTS=
EMAIL_ALLOWED_DOMAINS=
ENABLE_FILE_CONTENT_WRITES=false
ENABLE_CONTACT_WRITES=false
ENABLE_VACATION_RESPONDER_WRITES=false
ENABLE_KEEP_WRITES=false
ENABLE_GOOGLE_HEALTH_WRITES=false
OBSIDIAN_VAULT_FOLDER_ID=
ENABLE_OBSIDIAN_WRITES=false
ENABLE_SLACK_WRITES=false
MAX_FILE_WRITE_BYTES=4000000
FINANCE_APP_BASE_URL=https://your-finance-app.example.com
FINANCE_ALLOWED_PATH_PREFIXES=/api/mcp
ENABLE_FINANCE_WRITES=false
FINANCE_MAX_BODY_BYTES=250000
FINANCE_REQUEST_TIMEOUT_MS=15000Keep write-related ENABLE_* flags false until the corresponding accounts, route restrictions, and audit expectations have been tested.
Create one private Slack app per workspace from the manifests in slack/. Both use this OAuth redirect URL:
https://YOUR-WORKER.workers.dev/oauth/slack/callbackAfter configuring the four Slack client credential secrets, authorize each organization:
curl -i -H "Authorization: Bearer $ADMIN_SETUP_TOKEN" \
"https://YOUR-WORKER.workers.dev/oauth/slack/start?organization=organization-a"
curl -i -H "Authorization: Bearer $ADMIN_SETUP_TOKEN" \
"https://YOUR-WORKER.workers.dev/oauth/slack/start?organization=organization-b"Connect or reconnect each account:
Open https://YOUR-WORKER.workers.dev/setup, choose the provider and alias, and enter
ADMIN_SETUP_TOKEN. The token is submitted in the HTTPS request body and is not placed in the URL.
For command-line setup instead:
curl -i -H "Authorization: Bearer $ADMIN_SETUP_TOKEN" \
"https://YOUR-WORKER.workers.dev/oauth/google/start?alias=primary"
curl -i -H "Authorization: Bearer $ADMIN_SETUP_TOKEN" \
"https://YOUR-WORKER.workers.dev/oauth/microsoft/start?alias=primary"Open the returned location URL in a browser. Repeat with each account alias.
Connect ChatGPT
The Worker publishes OAuth authorization-server and protected-resource metadata automatically. In ChatGPT on the web:
Enable Developer Mode under Settings → Security and login.
Open Plugins, select +, and add:
https://YOUR-WORKER.workers.dev/mcpWhen the Worker authorization page opens, enter
ADMIN_SETUP_TOKENand approve the connection.Review the tools ChatGPT discovers before enabling the plugin.
Never enter the admin setup token into a page on a different hostname.
Write confirmations
The tool error tells the client the exact phrase required. Examples:
MODIFY 12 GMAIL THREADS IN primary
TRASH 3 GMAIL THREADS IN workspace
CREATE DRIVE FOLDER IN primary
UPDATE DRIVE FILE <file-id> IN workspace
CREATE CALENDAR EVENT IN primary
CREATE GOOGLE CONTACT IN primary
UPDATE GOOGLE CONTACT people/<contact-id> IN workspace
DELETE GOOGLE CONTACT people/<contact-id> IN primary
SET GMAIL VACATION RESPONDER IN primary
DISABLE GMAIL VACATION RESPONDER IN primary
CREATE WORKSPACE KEEP NOTE <title>
DELETE WORKSPACE KEEP NOTE notes/<note-id>
CREATE OBSIDIAN NOTE <note-name>
UPDATE OBSIDIAN NOTE <google-drive-file-id>
DELETE ONEDRIVE ITEM <item-id> IN primaryA recommended workflow is: search → present proposed changes → obtain user approval → call the write tool with the exact phrase.
Development
cp .dev.vars.example .dev.vars
npm run db:migrate:local
npm run dev
npm run typecheckTool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Cloudflare Workers MCP server: ai-model-router
9 remote MCP servers on Cloudflare Workers for AI agents. Free tier + Pro API keys.
Cloudflare Workers MCP server: ai-agent-scratchpad
Cloudflare Workers MCP server: ai-cost-optimizer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dan-s-w/unified-cloud-mcp-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server