Action1 MCP by usefulapi
Read endpoints, missing updates, CVE vulnerabilities, installed software and reports in Action1.
Beschreibung vom Entwickler (englisches Original)
MCP server for Google Workspace security auditing — login audit, external sharing, daily brief
Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.
Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.
Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.
Du brauchst
Welche App nutzt du?
Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.
Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein
{
"mcpServers": {
"gwsadm": {
"command": "uvx",
"args": [
"gwsadm-mcp"
]
}
}
}Führe das in deinem Terminal aus
claude mcp add gwsadm -- uvx gwsadm-mcpIn .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen
{
"mcpServers": {
"gwsadm": {
"command": "uvx",
"args": [
"gwsadm-mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
In .vscode/mcp.json in deinem Projekt einfügen
{
"servers": {
"gwsadm": {
"type": "stdio",
"command": "uvx",
"args": [
"gwsadm-mcp"
]
}
}
}Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.
Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.
Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.
Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.
Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.
Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 8. Nov. 2026
Der Registry-Name wurde mit dem GitHub-Konto shigechika bestätigt, dem das Repo gehört
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieses Repo haben wir noch nicht von GitHub gelesen
Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet
Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen
Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen
Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.
Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.
Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.
Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).
Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.23.1) kam vor 13 Tagen in die Registry.
Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Python (uv) auf deinem Computer.
In derselben Kategorie: Action1 MCP by usefulapi, ipdata MCP by usefulapi, MaxMind minFraud MCP by usefulapi
Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.
So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti
Read endpoints, missing updates, CVE vulnerabilities, installed software and reports in Action1.
Look up location, network, company and threat data for IP addresses and ASNs in ipdata.
MCP server for MaxMind minFraud — score transactions for fraud risk from your AI assistant.
Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.
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.
| Tool | Description |
|---|---|
health_check | Server version, config path, and per-domain auth probe — call at session start or after a timeout |
login_audit | Reports API login — accounts auto-disabled by Google (account_disabled_*: leaked password, hijacked, spamming), suspicious logins, failure top-N |
gmail_usage_report | Reports 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_accounts | Directory 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_user | Directory 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_tokens | Directory 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_user | State-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_activity | Reports 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_activity | Reports 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_sweep | The 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_sharing | Reports API drive — ACL grants to external addresses or domains (revocations reported separately) and visibility transitions into link/public exposure |
drive_doc_activity | Reports 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_changes | Reports 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_actions | Reports 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_status | Google 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_trace | Gmail 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_summary | Gmail 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_policy | Groups 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_members | Directory 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_brief | One-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_result | Same 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.
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:
| Scope | Needed by | Missing it |
|---|---|---|
https://www.googleapis.com/auth/admin.reports.audit.readonly | login_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.readonly | suspended_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.security | user_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
Nur der Anfang wird gezeigt; den Rest findest du im Repo