gws-admin-mcp

io.github.antct11由 GitHub 帳號 antct11 發布v0.3.0更新於 Oct 25, 2026

Safe Google Workspace admin for AI agents: read-only by default, confirm-gated deletes, audit log.

概覽

AI 產生的概覽

一個本機 MCP 伺服器,為 AI 助理提供安全的 Google Workspace 管理主控台:預設唯讀,破壞性操作需二次確認,並留有稽核記錄。

可以做什麼
列出並檢視使用者、群組、成員、組織單位、角色、網域、客戶資訊與群組設定,清單呼叫支援 Admin SDK 搜尋語法並自動分頁。檢視稽核記錄活動以及依使用者或依客戶的用量報表。啟用寫入模式後,可建立、更新、停權、重設密碼、移動或刪除使用者,並管理群組、組織單位、角色指派與群組設定。列出行動裝置與 ChromeOS 裝置,寫入模式下可移動裝置或執行抹除、取消佈建操作。
適用情境
適合讓助理回答 Google Workspace 網域內的問題,例如長期未登入的使用者或群組成員,或在變更窗口內執行受控的管理變更。預設唯讀模式適合日常查詢,寫入模式用於有人監督的明確變更。
執行需求
在本機執行,需要 Node.js 20 或更新版本。需要一個啟用 Admin SDK 與 Groups Settings API 的 Google Cloud 專案、服務帳戶 JSON 金鑰,並為該服務帳戶的用戶端 ID 授予網域層級委派。需在 config.json 的 delegatedAdmin 或 DELEGATED_ADMIN 變數中指定要模擬的 Workspace 超級管理員;也會讀取 GOOGLE_SA_KEY 與 CUSTOMER_ID。僅支援桌面版 MCP 用戶端。
安裝前請注意
服務帳戶金鑰可模擬擁有全組織權限的超級管理員,應避免提交到版本庫、限制權限並定期輪換。只有以 --allow-write 或 GWS_ADMIN_ALLOW_WRITE=1 啟動時才有寫入工具,刪除、抹除與取消佈建還需將 confirm 設為 true。寫入操作會變更、停權或刪除真實帳號與裝置。除非設定 GWS_ADMIN_AUDIT=0,每次工具呼叫都會寫入本機稽核檔案。資料僅傳送給 Google API。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 gws-admin-mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

gws-admin-mcp

A local Model Context Protocol (MCP) server that gives your AI agent (Cursor, Claude Desktop, or any MCP client) a safe Google Workspace admin console. It talks to the Admin SDK (Directory, Reports, Groups Settings) through a service account with domain-wide delegation, so the agent can answer questions like "which users haven't logged in for 90 days?" or "who is in the Finance group?" — and, only when you explicitly allow it, make changes.

MCP client ──stdio──► gws-admin-mcp ──service account JWT (impersonates an admin)──► admin.googleapis.com / groupssettings.googleapis.com

Runs entirely on your machine. No third-party service, no telemetry, no data leaves your laptop except the Google API calls themselves.

Safety model

This server assumes the agent driving it is fallible. Three layers:

  1. Read-only by default. Out of the box only the 17 read tools are registered — write tools are not hidden behind a runtime check, they simply do not exist in the tool list, so the agent cannot call them. Mutations require starting the server with --allow-write (or GWS_ADMIN_ALLOW_WRITE=1).
  2. Confirm gate on destructive calls. Even with writes enabled, the irreversible operations — users_delete, groups_delete, orgunits_delete, role_assignment_delete, mobile device wipe actions, and ChromeOS deprovision — are refused unless the call includes "confirm": true. The agent has to make the destructive intent explicit a second time.
  3. Audit log. Every tool call is appended as JSON lines to ~/.config/gws-admin-mcp/audit.log (mode 600), with passwords and secrets redacted. Disable with GWS_ADMIN_AUDIT=0 if you must.

Recommended pattern: run the read-only instance permanently, and start a second, write-enabled instance only for the duration of a change window.

Tools (40 total; 17 in read-only mode)

AreaRead-only toolsWrite tools (require --allow-write)
Usersusers_list, users_getusers_create, users_update, users_suspend, users_unsuspend, users_reset_password, users_make_admin, users_move_ou, users_delete*
Groupsgroups_list, groups_get, groups_list_membersgroups_create, groups_update, groups_delete*, groups_add_member, groups_remove_member, groups_update_member
Org unitsorgunits_list, orgunits_getorgunits_create, orgunits_update, orgunits_delete*
Rolesroles_list, role_assignments_listrole_assignment_create, role_assignment_delete*
Domains / customerdomains_list, customer_get—
Devicesdevices_list_mobile, devices_list_chromeosdevices_action_mobile, devices_action_chromeos, devices_move_chromeos
Reportsreports_activities (audit log), reports_usage_user, reports_usage_customer—
Group settingsgroupsettings_getgroupsettings_update

* Destructive — additionally requires "confirm": true in the call (device tools only for wipe/deprovision actions).

List tools auto-paginate up to a maxResults cap, and users_list supports the full Admin SDK search syntax (orgUnitPath='/Sales', isAdmin=true, email:jdoe*, ...).

Requirements

  • Node.js >= 20
  • Super-admin access to a Google Workspace domain (to grant domain-wide delegation)
  • A Google Cloud project (free — the Admin SDK has no usage cost)

Google Cloud setup

You need a service account whose key the server uses to impersonate a Workspace super-admin. Two paths:

Path A — scripted (needs gcloud)

bash
gcloud auth login [email protected]scripts/setup-service-account.sh [email protected] your-project-id

The script creates/reuses the project, enables the Admin SDK + Groups Settings APIs, creates the service account, writes the key and config to ~/.config/gws-admin-mcp/, and prints the client ID + scope string for the final manual step (step 5 below — Google provides no API for that part).

Path B — manual (Cloud console)

  1. Create a project at console.cloud.google.com (or reuse one dedicated to admin tooling).
  2. Enable APIs: Admin SDK API and Groups Settings API (APIs & Services → Library).
  3. Create a service account (IAM & Admin → Service Accounts → Create). No project-level IAM roles are needed — its power comes entirely from the delegation grant in the next steps.
  4. Create a JSON key for it (Keys tab → Add key → JSON) and save it as ~/.config/gws-admin-mcp/service-account.json with chmod 600.
  5. Grant domain-wide delegation — this is the step people miss:
    • Copy the service account's OAuth 2 client ID (a long number, shown on the service account details page).
    • In the Admin console (admin.google.com): Security → Access and data control → API controls → Domain-wide delegation → Add new.
    • Paste the client ID, and paste this exact scope list as one comma-separated line:
https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.group.member,https://www.googleapis.com/auth/admin.directory.orgunit,https://www.googleapis.com/auth/admin.directory.rolemanagement,https://www.googleapis.com/auth/admin.directory.domain.readonly,https://www.googleapis.com/auth/admin.directory.customer.readonly,https://www.googleapis.com/auth/admin.directory.device.mobile,https://www.googleapis.com/auth/admin.directory.device.chromeos,https://www.googleapis.com/auth/admin.reports.audit.readonly,https://www.googleapis.com/auth/admin.reports.usage.readonly,https://www.googleapis.com/auth/apps.groups.settings
  1. Tell the server which admin to impersonate. Create ~/.config/gws-admin-mcp/config.json:
json
{  "delegatedAdmin": "[email protected]",  "customerId": "my_customer"}

delegatedAdmin must be a super-admin of the domain. my_customer resolves to that admin's own organization.

Environment variables override the config files: GOOGLE_SA_KEY (key path), DELEGATED_ADMIN, CUSTOMER_ID, GWS_ADMIN_CONFIG_DIR (alternate config directory). See .env.example.

Build and verify

bash
npm installnpm run buildnode dist/cli.js doctor

doctor checks the key, mints a delegated token, and runs sample reads against users, domains, roles, and the audit reports API. All four should say PASS. Then optionally:

bash
npm run smoke   # spawns the real server over stdio, checks tool registration + live reads

MCP client configuration

Cursor (~/.cursor/mcp.json)

Read-only — the recommended default:

json
{  "mcpServers": {    "gws-admin": {      "command": "node",      "args": ["/ABSOLUTE/PATH/TO/gws-admin-mcp/dist/cli.js", "serve"]    }  }}

Write-enabled (use deliberately, ideally as a second entry you toggle on):

json
{  "mcpServers": {    "gws-admin-write": {      "command": "node",      "args": ["/ABSOLUTE/PATH/TO/gws-admin-mcp/dist/cli.js", "serve", "--allow-write"]    }  }}

Claude Desktop (claude_desktop_config.json)

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json · Windows: %APPDATA%\Claude\claude_desktop_config.json

json
{  "mcpServers": {    "gws-admin": {      "command": "node",      "args": ["/ABSOLUTE/PATH/TO/gws-admin-mcp/dist/cli.js", "serve"]    }  }}

Restart the client after editing. You should see the gws-admin server with 17 tools (read-only) or 40 (write-enabled).

Troubleshooting

SymptomCause / fix
unauthorized_client when minting a tokenThe domain-wide delegation grant is missing, uses the wrong client ID, or its scope list doesn't cover every scope the server requests. Re-paste the full scope string from above against the SA's OAuth2 client ID. Grants can take a few minutes to propagate.
Service-account key not found at ...Put the JSON key at ~/.config/gws-admin-mcp/service-account.json or set GOOGLE_SA_KEY to its path.
DELEGATED_ADMIN ... is not setAdd delegatedAdmin to config.json or set the DELEGATED_ADMIN env var.
403 Not Authorized to access this resource/apiThe impersonated user is not a super-admin, or the Admin SDK API isn't enabled in the Cloud project.
404 from Groups Settings callsThe Groups Settings API isn't enabled in the project (it's separate from the Admin SDK).
Write tools don't appear in the clientWorking as intended — start the server with --allow-write or GWS_ADMIN_ALLOW_WRITE=1.
A delete/wipe call returns Refused: ... destructive/irreversibleWorking as intended — re-issue the call with "confirm": true.
Client shows the server as failed on startupRun node dist/cli.js doctor in a terminal; it prints the exact failing check. Also confirm the args path in your MCP config is absolute.

Security notes

  • The service-account key impersonates a super-admin with org-wide power. Treat service-account.json like a domain-admin password: keep it out of git (this repo's .gitignore already excludes key files, .env, and config.json), keep it chmod 600, and rotate it periodically.
  • Prefer a dedicated Cloud project for this service account so the key is easy to audit and revoke.
  • Keep the permanent instance read-only. Enable writes in a separate instance only when you actually intend to change things, and turn it off after.

License & purchase

This repository is source-available, not open source: the code is public so you can read and audit every line before trusting it with a super-admin credential, but using it requires a license.

See LICENSE for the exact terms (no redistribution, no offering it as a hosted service).

來源:README.md,提交 e941550

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.3.0最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。