Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Google Apps Script MCP

NPM · MCP-GOOGLE-APPS-SCRIPT

MCP server for the Google Apps Script API: projects, code, versions, deployments and executions.

0 this week 78 Trust /100

Last scanned (5 hours ago)

Scores higher than 58% of npm servers

Category Developer Tools

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security81
  • No malware found by supply-chain analysis.Pass
  • CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
  • No install/post-install scripts declared.Pass
  • 30 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability70
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3784 tokens (~210/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 0
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • First check of Schema quality: unverified functional
    • Package version: 1.1.1 → 1.1.2 functional
  • 1 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 31 Oct 26 −14
    • Known CVEs: fail → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.97 → pass security
    • Dependency health: 0.86 → unverified ▼ functional
    • Package version: 1.0.0 → 1.1.1 functional
    • Package version: 1.0.0 → 1.1.0 functional
  • 29 Oct 26 −1
    • Stability: pass → 0.93 functional
  • 28 Oct 26 0
    • Security disclosure: unverified → fail ▼ functional
  • 27 Oct 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 24 Oct 26 −5
    • CVE-2023-54404 affects this package: high ▼ security
    • Known CVEs: pass → fail ▼ security
  • 21 Oct 26 0
    • Security disclosure: unverified → fail ▼ functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Analysed npm/mcp-google-apps-script@1.1.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Vulnerabilities 1 finding
ID CVE Severity Vector Fix available
GHSA-mrhx-c7xc-m3w5 CVE-2023-54404 high CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H yes

Background: What a vulnerability scan can and cannot prove →

Dependencies 94 packages
Packages resolved 94
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 18 exposed · ~3,380 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
auth_status ~81

Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

create_project ~209

Creates an Apps Script project and returns it (scriptId, title, createTime). Without parent_id the project is standalone (its scriptId doubles as its Drive file id); with parent_id — the Drive id of a Google Doc, Sheet, Slides or Form — the project is created bound to that container and can use its container-specific APIs (e.g. SpreadsheetApp.getActive()). A new project holds only a default manifest and an empty Code file: add real code with update_project_content next. IMPORTANT: the API cannot list or delete projects — keep the returned scriptId, it is the only handle. Requires the script.projects scope, the Apps Script API toggle at script.google.com/home/usersettings, and — for bound projects — access to the parent file.

NameTypeReqDescription
parent_idstring–Drive file id of a Google Doc, Sheet, Slides or Form to bind the project to; omit for a standalone project.
titlestringyesThe project title shown in the Apps Script editor.

No output schema declared.

No examples provided.

create_version ~170

Snapshots the project's current HEAD content as a new immutable version and returns it (versionNumber, description, createTime). Versions cannot be edited or deleted, and version numbers only grow — every call creates a NEW version, so do not re-send after an ambiguous failure without checking list_versions first. Creating a version does not change what runs anywhere: point a deployment at the new versionNumber via manage_deployments (action=create or update) to ship it.

NameTypeReqDescription
descriptionstring–Human-readable changelog line for this version (shown in the editor's version list).
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

finish_login ~123

Second step: waits up to 20 s for the browser consent to finish, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_project ~116

Returns the project's metadata: title, scriptId, parentId (present only for bound projects), creator, lastModifyUser, createTime and updateTime. No code is included — use get_project_content for the files. Useful to verify a scriptId exists and check whether the project is standalone or bound.

NameTypeReqDescription
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

get_project_content ~169

Returns the project's full file set: files[] with name (no extension), type (SERVER_JS = .gs code, HTML, JSON = the "appsscript" manifest), source, and per-file update info. By default HEAD (the latest saved code) is returned; version_number returns the content of that immutable version instead. Call this before update_project_content: replace mode needs the full new set including the manifest, and merge mode addresses files by these exact names.

NameTypeReqDescription
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.
version_numberinteger–Read the content of this immutable version instead of HEAD.

No output schema declared.

No examples provided.

get_project_metrics ~181

Returns execution metrics for the project: activeUsers, totalExecutions and failedExecutions as time series ({ value, startTime, endTime }; value is absent when zero). granularity daily covers the last 7 days, weekly aggregates by week. deployment_id narrows the numbers to one deployment. A rising failedExecutions count is the cue to call list_processes with statuses=[FAILED] for the concrete failures. Requires the script.metrics scope.

NameTypeReqDescription
deployment_idstring–Only count executions of this deployment.
granularitystringyesdaily = last 7 days per day; weekly = per week.
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

get_version ~110

Fetches one immutable version by its number: versionNumber, description and createTime. For the code of that version call get_project_content with version_number instead — this endpoint returns metadata only.

NameTypeReqDescription
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.
version_numberintegeryesThe version number from create_version or list_versions.

No output schema declared.

No examples provided.

list_processes ~377

Lists execution processes (the execution history): each entry carries projectName, functionName, processType (WEBAPP, EXECUTION_API, TIME_DRIVEN, TRIGGER, SIMPLE_TRIGGER, ADD_ON, EDITOR, MENU, BATCH_TASK), processStatus (COMPLETED, FAILED, TIMED_OUT, RUNNING, PAUSED, CANCELED, DELAYED, UNKNOWN), userAccessLevel, startTime and duration. With script_id only that script's executions are listed; without it, ALL executions started by the authorizing user across their scripts. To hunt errors, filter statuses=["FAILED","TIMED_OUT"] — but note the API returns no error messages or logs here, only the fact and time of failure: get the message by re-running via run_function, or from the Apps Script dashboard / Cloud Logging. start_time/end_time (RFC3339 UTC) bound the process start; paginate with page_token. Requires the script.processes scope.

NameTypeReqDescription
deployment_idstring–Only processes of this deployment.
end_timestring–Only processes started before this RFC3339 UTC timestamp.
function_namestring–Only processes that ran this function.
page_sizeinteger–Processes per page (1..50; API default 50).
page_tokenstring–nextPageToken from the previous page.
script_idstring–Limit to this script's executions; omit for all of the caller's executions.
start_timestring–Only processes started at or after this RFC3339 UTC timestamp.
statusesarray–Only these process states, e.g. ["FAILED","TIMED_OUT"] for error hunting.
typesarray–Only these launch types (EXECUTION_API = run_function calls, TIME_DRIVEN = clock triggers).

No output schema declared.

No examples provided.

list_versions ~142

Lists the project's immutable versions (versionNumber, description, createTime), newest first. Paginate with page_token from nextPageToken. Use it to pick a versionNumber for manage_deployments or to read old code via get_project_content with version_number.

NameTypeReqDescription
page_sizeinteger–Versions per page (1..50; API default 50).
page_tokenstring–nextPageToken from the previous page.
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

logout ~62

Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

manage_deployments ~385

Manages the project's deployments — the published entry points (web app, API executable, add-on) that make code callable from outside the editor. action=create deploys version_number (omit it to deploy HEAD — updates live with every save; fine for testing, risky for production) with an optional description. action=list shows all deployments including the automatic @HEAD one (paginate with page_token from nextPageToken); get needs deployment_id and returns entryPoints[] — the web app URL (webApp.url) and the API-executable config run_function depends on. action=update repoints an existing deployment at another version_number and/or changes its description (this is how you ship or roll back without changing the URL; the current config is read first and merged, so omitted fields are preserved); delete removes it permanently and breaks its URL/integrations (the @HEAD deployment cannot be deleted). WHAT a deployment exposes (web app vs API executable, who can access) comes from the appsscript manifest at the deployed version — set it via update_project_content before creating the version. Requires the script.deployments scope.

NameTypeReqDescription
actionstringyesWhat to do with the deployments.
deployment_idstring–get/update/delete: the deployment to target.
descriptionstring–create/update: human-readable deployment description.
page_sizeinteger–list: deployments per page (1..50; API default 50).
page_tokenstring–list: nextPageToken from the previous page.
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.
version_numberinteger–create/update: the immutable version to deploy; omit on create to deploy HEAD.

No output schema declared.

No examples provided.

raw_request ~233

Escape hatch to call any Google Apps Script API v1 path directly, for requests the typed tools don't cover — e.g. GET "v1/projects/<scriptId>/content?versionNumber=3", or a PUT to "v1/projects/<scriptId>/content" with a hand-built files body. The path may carry a query string; repeated filter params can be encoded there (e.g. "v1/processes?userProcessFilter.statuses=FAILED&userProcessFilter.statuses=TIMED_OUT"). The Bearer token is added automatically and paths resolving to a foreign origin are rejected; the method defaults to GET. Remember: PUT v1/projects/<id>/content replaces the ENTIRE file set — prefer update_project_content, whose merge mode protects the other files.

NameTypeReqDescription
bodyobject–JSON request body (POST/PUT only).
methodstring–HTTP method (the Apps Script API uses only these four). Defaults to GET.
pathstringyesAPI path relative to https://script.googleapis.com, e.g. "v1/projects/<scriptId>/deployments".

No output schema declared.

No examples provided.

run_function ~355

Runs a named function in the script and returns { done, result } — or, when the script itself throws, { done, script_error: { type, message, stack } } with the Apps Script stack trace (this is a script bug, not a transport error; do not blindly retry, the function may have side effects). HARD PREREQUISITES the API enforces: (1) the script must have an API-executable deployment (Deploy > New deployment > API executable, or a manifest with executionApi); (2) this server's OAuth client must belong to the SAME Google Cloud project as the script (script editor > Project Settings > change the GCP project number); (3) the OAuth token must carry every scope the script itself uses (listed in the editor under Project Settings > Show "appsscript.json") — otherwise the call fails with 403 PERMISSION_DENIED or 404. parameters are positional and must be JSON-serializable (no Apps Script objects like Document or Range). dev_mode=true runs the latest saved code instead of the deployed version — owner only. Executions time out after 6 minutes on the Apps Script side.

NameTypeReqDescription
dev_modeboolean–Run the latest saved code instead of the deployed version (script owner only; default false).
function_namestringyesThe name of the function to run, without parentheses.
parametersarray–Positional arguments, JSON-serializable primitives/arrays/objects only.
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

set_client ~111

Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.

NameTypeReqDescription
pathstringyesAbsolute path to the client_secret_*.json file downloaded from Google Cloud Console.

No output schema declared.

No examples provided.

setup_instructions ~121

Returns the setup checklist for this server as structured JSON: how to enable the Apps Script API (the per-account toggle at script.google.com/home/usersettings AND the Cloud-project API), which OAuth scope each tool needs (so the operator can mint a minimal-scope refresh token), the extra prerequisites of run_function (API-executable deployment, same-Cloud-project OAuth client, the script's own scopes), and the API's known limits. Works without credentials — call it first when any tool fails with 403 PERMISSION_DENIED or when setting the server up.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

start_login ~114

First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

update_project_content ~321

Writes code files to the project's HEAD (deployed versions are untouched until you create a version + deployment). Two modes. mode="merge" (default, safer): the current content is read first, the given files are added or overwritten BY NAME, delete_files removes named files, everything else is preserved — not atomic, a concurrent edit between read and write is lost. mode="replace": the given files become the ENTIRE project; any file not in the list is deleted, and the list must include the "appsscript" manifest (type json) or the call is rejected before hitting the API. File names carry no extension ("Code", not "Code.gs"); the manifest cannot be deleted. Returns the resulting file set. This write is never retried after a 5xx or timeout — check with get_project_content before re-sending.

NameTypeReqDescription
delete_filesarray–merge only: file names to remove (no extension). The "appsscript" manifest cannot be deleted.
filesarrayyesThe files to write (merge: upserted by name; replace: the entire new file set).
modestring–merge (default): upsert the given files, keep the rest; replace: the given files become the whole project (manifest "appsscript" required).
script_idstringyesThe script project id — from the Apps Script editor URL (script.google.com/home/projects/<scriptId>/edit) or from create_project output. For standalone projects it doubles as the Drive file id.

No output schema declared.

No examples provided.

Install

How do I install the Google Apps Script MCP server?

Google Apps Script MCP runs locally as an npm package, launched with npx -y mcp-google-apps-script. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · mcp-google-apps-script

# add to Claude Code
claude mcp add a1-x-tech-mcp-google-apps-script -- npx -y mcp-google-apps-script
Common questions

What is the Google Apps Script MCP server?

Google Apps Script MCP is listed in the public MCP registry as io.github.A1-x-Tech/mcp-google-apps-script. MCP server for the Google Apps Script API: projects, code, versions, deployments and executions. This page covers its npm package (mcp-google-apps-script).

Is the Google Apps Script MCP server safe to use?

Google Apps Script MCP scores 78 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 4 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Google Apps Script MCP server expose?

Google Apps Script MCP exposes 18 tools: auth_status, set_client, start_login, finish_login, logout, and 13 more. Their descriptions and schemas cost roughly 3,380 tokens of context every time the server is loaded.

Is the Google Apps Script MCP server still maintained?

Google Apps Script MCP is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Google Apps Script MCP server under?

Google Apps Script MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.