プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Google Workspace Admin Security-Audit MCP

作者:shigechikaバージョン 0.23.1i★ –iパソコンで動く
レジストリ名io.github.shigechika/gwsadm-mcp

インストール

概要

作者による説明(英語の原文)

MCP server for Google Workspace security auditing — login audit, external sharing, daily brief

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: stdio
  • カテゴリ: サイバーセキュリティ

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

  • 基本チェック:1項目中1項目に合格
  • あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
  • レジストリには、入力が必要なキーは載っていません。

必要なもの

  • PyPIPythonのuvのインストール(uvxコマンドに必要)

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

{
  "mcpServers": {
    "gwsadm": {
      "command": "uvx",
      "args": [
        "gwsadm-mcp"
      ]
    }
  }
}

ターミナルでこれを実行します

claude mcp add gwsadm -- uvx gwsadm-mcp

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

{
  "mcpServers": {
    "gwsadm": {
      "command": "uvx",
      "args": [
        "gwsadm-mcp"
      ]
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

{
  "servers": {
    "gwsadm": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "gwsadm-mcp"
      ]
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント shigechika で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

サイバーセキュリティのほかのサーバーとの比較i

  • このカテゴリのほかの1004件のうち0%よりスターが多い
  • このカテゴリのほかの1004件のうち74%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの1004件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Google Workspace Admin Security-Audit MCPは安全ですか?

当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は–、最新バージョン(0.23.1)がレジストリに届いたのは13 日前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。

代わりに使えるものは?

同じカテゴリには:Osv MCP, Epss MCP, Cveawg MCP

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Osv MCP

MCP server for OSV open source vulnerability data and package security checks.

作者:mrfentmenとても新しい↓ 64/週今日更新

パソコンで動く

Epss MCP

Exploit Prediction Scoring System scores: how likely a CVE will be exploited in the next 30 days.

作者:mrfentmenとても新しい↓ 152/週今日更新

パソコンで動く

Cveawg MCP

CVE Services: authoritative CVE records - des MCP: real tools for real work.

作者:mrfentmen今日更新

パソコンで動く

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

gwsadm-mcp

English | 日本語

Google Workspace security-audit MCP (Model Context Protocol) server — read-only visibility into account locks, suspicious logins, and external file sharing, built on the Admin SDK Reports API (audit activities).

Named after the admin-console viewpoint (gwsadm = Google Workspace admin), sibling of boxadm-mcp. This is not a general-purpose Workspace MCP: it surfaces risk and changes nothing, with one opt-in exception — sign_out_user, which exists only when the server is started with GWSADM_ENABLE_SIGN_OUT=1.

Features

ToolDescription
health_checkServer version, config path, and per-domain auth probe — call at session start or after a timeout
login_auditReports API login — accounts auto-disabled by Google (account_disabled_*: leaked password, hijacked, spamming), suspicious logins, failure top-N
gmail_usage_reportReports API customerUsageReports — daily Gmail send/receive counts per domain, one date at a time, ending yesterday (the API's own UTC-8:00/PST date anchor). Requires the separate admin.reports.usage.readonly DWD scope (see Auth model below) — a DIFFERENT grant from admin.reports.audit.readonly even though both are Reports API
suspended_accountsDirectory API — current snapshot of suspended accounts (isSuspended=true); cross-reference against a downstream IdP (e.g. KeyCloak) to find suspended-but-still-enabled accounts
get_userDirectory API users().get — one named account's current state: suspended (with reason and time), archived, last_login, 2SV enrolled/enforced, org unit, creation time, pending password change. The "why can't this person sign in" lookup: one request, no pagination, for an address you already know — unlike suspended_accounts, which lists only accounts that ARE suspended, so it can never confirm that a given address is *not* suspended (and once that list exceeds its page cap, absence stops being evidence either way). Needs no scope beyond the one suspended_accounts already uses
user_oauth_tokensDirectory API tokens().list — third-party OAuth app grants for one user; a compromise vector login_audit is blind to, since a previously-granted token needs no fresh login. Domain resolved from the username's suffix, with an optional domain override for alias/secondary-domain addresses
sign_out_userState-changing, opt-in. Directory API users().signOut — signs one account out of every web and device session and resets its sign-in cookies, after confirming the account exists with users().get. Registered only when the server starts with GWSADM_ENABLE_SIGN_OUT=1; put an approval step in front of it. Does not revoke OAuth grants or app passwords, remove an enrolled second factor or change the password (listed in its not_covered). Needs two grants: admin.directory.user.readonly for the account check (as get_user) and admin.directory.user.security for the sign-out itself (as user_oauth_tokens); the impersonated admin must also be allowed to manage user security. Answers signed_out true (Google confirmed), false (nothing changed) or null (outcome unknown: sent, no answer in time) with the same keys every time, and ends within GWSADM_SIGN_OUT_DEADLINE_SECONDS (default 45). The address's own domain must be configured; domain, if given, must match it.
user_activityReports API activities().list with userKey= — everything one account did in a window, merged across applications (login, token, user_accounts, drive, groups, calendar, chat, meet, saml by default) newest first. flags surfaces the events that change the account's security posture regardless of volume — 2SV enrolled/disabled, recovery email/phone changed, password changed, outbound forwarding, Google's risky_sensitive_action_* / suspicious_login verdicts, every OAuth authorize with client and scopes — because a second factor the attacker enrolled survives a password reset; ips lists the distinct source addresses with first/last seen. Google's own account_disabled_* / suspicious_login verdicts are not served under the account's userKey (their actor is Google), so they are fetched the way login_audit does and reported under the synthetic application login_verdicts. The post-compromise question login_audit cannot answer: it sees only the events Google itself raised, domain-wide
ip_activityReports API activities().list with actorIpAddress= — every account one source address acted as, per domain and application, with the same flags. The follow-through after user_activity names an attacker's address: did the same source reach other accounts? A spray shows up as login_failure counts before it ever succeeds
compromise_sweepThe Google-side follow-through after one account is confirmed compromised, in one call: activity (user_activity, flags first), state / grants (get_user; OAuth grants with mail / Drive / contacts / admin scopes called out as risky), ips (ip_activity across every domain for the attacker's addresses — given, or taken from the account's own flags — with the account itself excluded), and gmail: the settings an attacker leaves behind to keep reading mail (auto-forwarding, forwarding addresses, filters that forward / delete / archive, delegates, send-as and reply-to) plus what the mailbox sent in the window as counts and recipient domains — never a subject or body. gmail.kind says whether it could be read at all: ok / partial (one settings section or the sent summary failed; the rest stands) / api_disabled (the Gmail API is off in the service account's own Cloud project) / no_grant / error — a failure is reported, never read as "nothing found". highlights lists the facts to act on, checklist what remains to do by hand. Shares gmail_message_trace's gmail.readonly DWD scope (every settings read, delegates.list included, is served by it — verified live)
drive_external_sharingReports API drive — ACL grants to external addresses or domains (revocations reported separately) and visibility transitions into link/public exposure
drive_doc_activityReports API drive with a server-side doc_id filter — one document's owner, ACL changes, and lifecycle events. Triage companion to drive_external_sharing: the owner (an individual vs. a shared drive's name) disambiguates the shared-drive false-positive class, where files created inside a shared drive propagate member ACLs and read as bulk external sharing
shared_drive_membership_changesReports API drive (shared_drive_membership_change) — who added/removed/re-roled shared-drive members and when, with external classification of the affected member and a client-side drive-name filter
admin_actionsReports API admin — what administrators (people, or a sync or API client acting as one) did in the Admin console: to one user or group (server-side USER_EMAIL / GROUP_EMAIL filters on the target's domain) or tenant-wide. Answers "who suspended this account / reset its password / took it out of a group?", which user_activity cannot: an admin event's actor is the administrator, not the account acted upon
workspace_statusGoogle Workspace Status Dashboard (public feed, no credential) — open incidents and those that ended within the window, optionally for one product (Gmail, Drive, ...). Answers "is it Google?" before a tenant-side investigation
gmail_message_traceGmail API — did a known Message-ID reach specific mailboxes, and where (inbox/spam/trash/archived)? For each recipient it impersonates that user via DWD and searches their own mailbox. Requires the separate gmail.readonly DWD scope (see Auth model below); a domain missing that grant reports a per-recipient error, never a false "not found"
dmarc_rua_summaryGmail API — DMARC aggregate (RUA) report pass/fail summary and top reject-candidate source IPs, per domain. Impersonates the domain's configured dmarc_rua_mailbox (a real user; default postmaster@ ), searches it for mail addressed to dmarc_rua_recipient (the published rua= address, e.g. postmaster+rua@; default: the mailbox) and reads the compressed report attachments those messages carry. Shares gmail_message_trace's gmail.readonly DWD scope, but unlike that tool this one DOES read attachment content (the report XML), not just metadata — see Auth model below
group_delivery_policyGroups Settings API — a Google Group's own posting/delivery policy (who_can_post, allow_external_members, moderation levels). A group's access control sits in front of Gmail delivery: a domain-only posting policy silently drops an external sender's mail before it generates any Gmail delivery event at all, indistinguishable from a delivery failure without reading the policy directly. Requires the separate apps.groups.settings DWD scope (see Auth model below)
list_group_membersDirectory API — a Google Group's basic metadata and member roster, resolved directly rather than inferred from who happened to receive one particular message. Requires the separate admin.directory.group.readonly and admin.directory.group.member.readonly DWD scopes (see Auth model below)
daily_briefOne-call summary across all configured domains, including account-protection changes (2-Step Verification, passkeys, Advanced Protection, password, recovery address/phone, mail forwarding out of the domain) flagged when they come from outside your home countries (GWSADM_IP2ASN, GWSADM_HOME_COUNTRIES), from an origin that cannot be placed, or follow a suspicious login
daily_brief_start / daily_brief_resultSame as daily_brief, run in the background: start returns a job_id immediately, then poll result(job_id) until done. Use on large tenants where the synchronous call risks the client's ~60s tool-call timeout

Planned: dlp_events (Reports rules; requires a Workspace edition with DLP), token_events.

Auth model

Service account with domain-wide delegation (DWD) impersonating an audit-capable admin. Fully non-interactive — no browser, no token refresh rotation — so the server runs unattended (cron, MCP gateway, CI).

Grant all of the following DWD scopes on the same service-account client ID up front, in one setup pass. Adding them one at a time as each tool gets built is how a scope goes missing until the one tool that needed it starts degrading — one place, one pass, avoids the trap:

ScopeNeeded byMissing it
https://www.googleapis.com/auth/admin.reports.audit.readonlylogin_audit, user_activity, ip_activity, admin_actions, drive_external_sharing, drive_doc_activity, shared_drive_membership_changes, daily_brief*those tools degrade to a per-domain error
https://www.googleapis.com/auth/admin.directory.user.readonlysuspended_accounts, get_user, sign_out_user (opt-in; its account check)those tools degrade to an error (per-domain for suspended_accounts); everything else keeps working
https://www.googleapis.com/auth/admin.directory.user.securityuser_oauth_tokens, sign_out_user (opt-in)those tools degrade to a per-domain error; everything else keeps working

health_check needs no scope at all to respond: it is the tool to call when a grant might be missing — it probes each domain and reports the failing auth in a structured per-domain result instead of failing itself.

gmail_usage_report needs its own separate scope too, despite living under the same Admin SDK Reports API as the base pass above — the "Usage report" family (customerUsageReports) and the "Audit" activ

冒頭だけを表示しています。続きはリポジトリで読めます

PopNxに聞く