{
  "data": {
    "a": {
      "slug": "google-cloud-storage",
      "name": "Google Cloud Storage",
      "vendor": "Google Cloud",
      "vendorUrl": "https://cloud.google.com/storage",
      "kind": "http-api",
      "category": "file-storage",
      "summary": "Google Cloud Storage is Google Cloud's object store for buckets and objects, reached through JSON and XML REST APIs, a gRPC Storage Control API, the gcloud CLI, client libraries and a generally available remote MCP server.",
      "url": "https://www.anchorterminal.com/tools/google-cloud-storage",
      "markdownUrl": "https://www.anchorterminal.com/tools/google-cloud-storage.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/google-cloud-storage.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/google-cloud-storage.json",
      "dns": "google-cloud-storage.grade.anchorterminal.com",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://storage.googleapis.com/storage/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "@google-cloud/storage"
        },
        {
          "registry": "pypi",
          "name": "google-cloud-storage"
        }
      ],
      "auth": "oauth",
      "authNotes": "Google OAuth 2.0 access tokens for user or service-account identities, scoped by IAM roles on the project, bucket or managed folder, with HMAC keys for the XML API's S3-style access, and V4 signed URLs that carry a signature, not the secret. The MCP server uses the same Google authentication, with its own IAM permissions per MCP method.",
      "pricing": "usage",
      "pricingNotes": "Pay per GB-month stored, per 1,000 operations and per GB of egress, by location and class. Standard in a single region is $0.005 per 1,000 Class A and $0.0004 per 1,000 Class B operations; a dual-region example bills $0.022 per GB-month. Always Free gives 5 GB-months of Standard storage, 5,000 Class A and 50,000 Class B operations in three US regions. Failed 4xx and 5xx operations are generally not charged.",
      "priceSummary": "$0.005 / 1k req",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on Cloud Storage or its pricing page (checked 2026-11-06).",
        "endpoints": []
      },
      "toolCount": 9,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://docs.cloud.google.com/storage/docs/apis",
      "openapi": "https://storage.googleapis.com/$discovery/rest?version=v1",
      "capabilities": [
        "storage.object",
        "storage.presigned",
        "storage.s3",
        "storage.share"
      ],
      "tags": [
        "hosted",
        "usage",
        "free-tier",
        "mcp",
        "remote-mcp",
        "oauth",
        "iam",
        "google-cloud",
        "object-storage",
        "signed-urls",
        "sla",
        "grpc"
      ],
      "lastRelease": "2026-11-04",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 76.7,
        "grade": "BB",
        "agentReady": true,
        "rank": 41,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 4,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 85,
          "maintenance": 88,
          "payments": 30,
          "reliability": 80,
          "schema": 81,
          "security": 85,
          "transparency": 85
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "IAM per bucket and MCP method, signed URLs, preconditions for safe retries and a 99.95 per cent multi-region SLA make it a well-governed object store for agents. The nine-tool MCP server has no read-only or destructive annotations, reads stop at 8 MiB, and a person must set up a project and billing first.",
        "bestFor": "Agents on Google Cloud that store and share files and datasets. amazon-s3, azure-blob-storage and cloudflare-r2 are the closest listings; teams outside Google Cloud with S3 tooling may prefer S3-compatible stores.",
        "strengths": [
          "Generally available MCP server since 20 April 2026, with IAM permissions per MCP method",
          "Preconditions and a documented retry strategy make writes safe to retry",
          "SLA of 99.95 per cent a month for multi-region Standard storage",
          "Signed URLs share objects without sharing credentials",
          "Cloud Audit Logs cover admin and data access"
        ],
        "weaknesses": [
          "MCP tools carry no read-only or destructive annotations and deletes need no confirmation",
          "read_object stops at 8 MiB through MCP",
          "A high-severity multi-product incident affected Cloud Storage on 20 August 2026",
          "Project and billing setup needs a person in a browser"
        ],
        "agentNotes": [
          "Grant the agent's service account only Storage Object Viewer or Creator on the bucket it needs",
          "Send ifGenerationMatch on writes and deletes so a retry can't overwrite a newer object",
          "Use a V4 signed URL to share an object rather than changing bucket access",
          "Read objects over 8 MiB through the JSON API with Range, not the MCP read_object tool",
          "Confirm with the user before delete_bucket or delete_object"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 76.7
          }
        ],
        "editorialScores": {
          "ergonomics": 85,
          "maintenance": 88,
          "payments": 30,
          "reliability": 80,
          "schema": 81,
          "security": 85,
          "transparency": 73
        },
        "provenanceScore": 97,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "pip install google-cloud-storage",
        "http": "curl -H \"Authorization: Bearer $(gcloud auth print-access-token)\" \"https://storage.googleapis.com/storage/v1/b?project=PROJECT_ID\""
      },
      "letme": {
        "capability": "https://letme.dev/storage.object",
        "tool": "https://letme.dev/google-cloud-storage"
      },
      "sameCompany": [
        "gemini-api",
        "vertex-ai",
        "gemini-embedding",
        "vertex-ai-tuning",
        "cloud-run-gpus",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "google-cloud-tts",
        "gemini-live",
        "google-adk",
        "google-memory-bank",
        "google-secret-manager",
        "google-cloud-document-ai",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "firebase-cloud-messaging",
        "google-drive-api",
        "gemini-enterprise",
        "gemini-cli",
        "google-search-console",
        "google-ads-api",
        "google-forms",
        "google-sheets-api",
        "gmail-api",
        "google-people-api"
      ],
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Class A operation, Standard, regional",
          "unit": "1k-requests",
          "usd": 0.005,
          "note": "Flat namespace; $0.0065 with hierarchical namespace"
        },
        {
          "item": "Class B operation, Standard, regional",
          "unit": "1k-requests",
          "usd": 0.0004,
          "note": "Flat namespace; $0.0005 with hierarchical namespace"
        },
        {
          "item": "Standard storage, dual-region example",
          "unit": "gb-month",
          "usd": 0.022,
          "note": "Per the pricing page's Iowa and Oregon dual-region example; regional rates vary by location"
        }
      ],
      "provenance": {
        "legalEntity": "Google LLC (Google Cloud EMEA Limited and other regional entities by billing address)",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "endpointOnVendorDomain": true,
        "terms": "https://cloud.google.com/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://status.cloud.google.com",
        "changelog": "https://docs.cloud.google.com/storage/docs/release-notes",
        "securityTxt": "valid",
        "checked": "2026-11-06",
        "notes": [
          "Legal entity, terms, privacy and security.txt follow the Google Cloud provenance in data/tools/google-secret-manager.json (checked 1 November 2026); not re-read for this listing.",
          "status.cloud.google.com/robots.txt allows all; its incidents.json was read on 6 November 2026.",
          "The API lives at storage.googleapis.com and the docs at docs.cloud.google.com, both Google domains."
        ],
        "score": 97
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/google-cloud-storage.json",
      "live": {
        "slug": "google-cloud-storage",
        "probe": {
          "target": "https://storage.googleapis.com/storage/mcp",
          "method": "get",
          "lastAt": "2026-11-07T18:20:27.576703196Z",
          "lastOk": true,
          "lastStatus": 405,
          "lastMs": 120,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 44,
          "p95ms24h": 120,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@google-cloud/storage",
            "version": "8.4.0",
            "seenAt": "2026-11-06T23:29:10.718971869Z"
          },
          {
            "registry": "pypi",
            "name": "google-cloud-storage",
            "version": "3.17.1",
            "released": "2026-10-15",
            "seenAt": "2026-11-06T23:29:11.680918026Z"
          }
        ],
        "npmWeekly": 26901222,
        "pypiWeekly": 39461441,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-11-07T16:01:22.068349931Z"
        },
        "pages": [
          {
            "url": "https://docs.cloud.google.com/storage/docs/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:05:53.84257971Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2d3b4b4b1622"
          }
        ],
        "updatedAt": "2026-11-07T18:20:27.576703196Z"
      }
    },
    "answer": "Google Cloud Storage scores 76.7 (BB) on agent readiness against Google Drive API + MCP's 75.5 (BB), and leads in 4 of 7 scored categories. Google Drive API + MCP leads on schema \u0026 documentation and payments \u0026 pricing.",
    "b": {
      "slug": "google-drive-api",
      "name": "Google Drive API + MCP",
      "vendor": "Google",
      "vendorUrl": "https://developers.google.com/workspace/drive",
      "kind": "http-api",
      "category": "file-storage",
      "summary": "REST API for a user's or a Workspace organisation's Drive, files, folders, permissions and share links, with resumable uploads and change feeds.",
      "url": "https://www.anchorterminal.com/tools/google-drive-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/google-drive-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/google-drive-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/google-drive-api.json",
      "dns": "google-drive-api.grade.anchorterminal.com",
      "repo": "https://github.com/googleapis/google-api-nodejs-client",
      "license": "Apache-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://www.googleapis.com/drive/v3",
      "packages": [
        {
          "registry": "npm",
          "name": "@googleapis/drive"
        },
        {
          "registry": "pypi",
          "name": "google-api-python-client"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 with Drive scopes; drive.file limits an app to files it created or the user picked, the full drive scope is restricted and needs Google's verification for public apps. Service accounts with domain-wide delegation work for Workspace domains. The MCP server needs a Google Cloud project with drive.googleapis.com and drivemcp.googleapis.com enabled, an OAuth web client with your MCP client's redirect URI, the drive.readonly and drive.file scopes, and membership of the Workspace Developer Preview Program.",
      "pricing": "free",
      "pricingNotes": "The Drive API costs nothing within quota. Limits are 1,000,000 quota units a minute a project and 325,000 a minute a user, with 400,000,000 units and 1 TB of egress a day a project before charges apply. A files.get costs 5 units, an edit 50, a files.list 100 and a download 200. Google says exceeding the quota request limits is planned to incur charges to the Cloud billing account later in 2026, with no prices published yet and at least 90 days' notice before billing changes take effect. The 1 May 2026 release note also says Workspace users can egress only 1 TB a day. Files count against the account's own Drive storage, which is bought as Google One or a Workspace plan (https://developers.google.com/workspace/drive/api/guides/limits; https://developers.google.com/workspace/release-notes).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 8,
      "popularity": {
        "githubStars": 12300,
        "npmWeekly": 1321000,
        "pypiWeekly": 29823951,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developers.google.com/workspace/drive/api/guides/about-sdk",
      "capabilities": [
        "storage.drive",
        "storage.share",
        "work.docs"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "free",
        "mcp",
        "oauth",
        "typescript",
        "python",
        "webhooks"
      ],
      "lastRelease": "2026-10-19",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 75.5,
        "grade": "BB",
        "agentReady": true,
        "rank": 59,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 6,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 87,
          "maintenance": 85,
          "payments": 35,
          "reliability": 70,
          "schema": 89,
          "security": 83,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-01"
        },
        "negative": 0,
        "verdict": "No charge for API calls within quota, counted in quota units per minute per project and per user. OAuth consent, scope verification and a Cloud project before an agent can list a folder.",
        "bestFor": "Agents working on files that people already keep in Drive, inside a Workspace organisation with admin controls.",
        "strengths": [
          "No charge for API calls within quota, counted in quota units per minute per project and per user",
          "Public discovery document (revision 20261028, 64 methods) and 40-odd documented error reasons with backoff advice",
          "Official MCP server with eight tools, none that delete or share, and a setup page that warns about prompt injection",
          "drive.file and drive.readonly scopes keep an agent to its own files or to reading",
          "All eight MCP tools carry readOnlyHint, destructiveHint and idempotentHint annotations, and six are read-only"
        ],
        "weaknesses": [
          "OAuth consent, scope verification and a Cloud project before an agent can list a folder",
          "The MCP server is Developer Preview and needs your own OAuth client and programme membership",
          "expirationTime can't be set on domain or anyone shares, so a public link never expires on its own",
          "Drive was slow or failing for users in Australia, the Philippines and New Zealand for 12 hours 42 minutes on 18 and 19 August 2026",
          "Overage charges planned for later in 2026 are unpriced, and Google's pages set a 1 TB daily egress limit per Workspace user and per project"
        ],
        "agentNotes": [
          "Ask for drive.file rather than drive; it needs no verification and covers files the app created or the user picked",
          "Use uploadType=resumable for anything over 5 MB and send chunks in multiples of 256 KB, and pass fields= on files.list and files.get to cut responses",
          "For a link that expires, share to a user or group with expirationTime; a type=anyone permission can't expire, so delete it yourself",
          "Mark the OAuth client \"Use this client for an AI-powered agent\" before 12 November 2026, since Workspace MCP servers reject unmarked clients from 11 November",
          "Back off exponentially on 429 rateLimitExceeded and 403 userRateLimitExceeded; 403 storageQuotaExceeded won't clear by retrying"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.4,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 75.5
          }
        ],
        "editorialScores": {
          "ergonomics": 87,
          "maintenance": 85,
          "payments": 35,
          "reliability": 70,
          "schema": 89,
          "security": 83,
          "transparency": 70
        },
        "provenanceScore": 80,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-01",
            "maintenance": "2026-11-01",
            "payments": "2026-11-01",
            "reliability": "2026-11-01",
            "schema": "2026-11-01",
            "security": "2026-11-01",
            "transparency": "2026-11-01"
          },
          "last": "2026-11-01",
          "lastMoved": "2026-10-17",
          "oldest": "2026-11-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl \"https://www.googleapis.com/drive/v3/files?pageSize=10\u0026fields=files(id,name,mimeType)\" \\\n  -H \"Authorization: Bearer $GOOGLE_OAUTH_TOKEN\"",
        "claudeCode": "claude mcp add --transport http google-drive https://drivemcp.googleapis.com/mcp/v1",
        "config": {
          "mcpServers": {
            "google-drive": {
              "url": "https://drivemcp.googleapis.com/mcp/v1"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/storage.drive",
        "tool": "https://letme.dev/google-drive-api"
      },
      "sameCompany": [
        "gemini-api",
        "vertex-ai",
        "gemini-embedding",
        "vertex-ai-tuning",
        "cloud-run-gpus",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "google-cloud-tts",
        "gemini-live",
        "google-adk",
        "google-memory-bank",
        "google-secret-manager",
        "google-cloud-document-ai",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "firebase-cloud-messaging",
        "google-cloud-storage",
        "gemini-enterprise",
        "gemini-cli",
        "google-search-console",
        "google-ads-api",
        "google-forms",
        "google-sheets-api",
        "gmail-api",
        "google-people-api"
      ],
      "area": "everyday",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "endpointOnVendorDomain": false,
        "terms": "https://developers.google.com/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://www.google.com/appsstatus/dashboard/",
        "changelog": "https://developers.google.com/workspace/release-notes",
        "securityTxt": "valid",
        "checked": "2026-11-01",
        "notes": [
          "The API endpoints sit on googleapis.com, not google.com.",
          "The MCP server is part of the Workspace Developer Preview Program and can change or need re-enrolment.",
          "The Google APIs Terms of Service (last modified 2021-11-09, re-read 2026-11-01) name Google LLC, 1600 Amphitheatre Parkway, Mountain View.",
          "The Google privacy policy read on 2026-11-01 is the version effective 16 October 2026, and security.txt expires 2030-04-01."
        ],
        "score": 80
      },
      "requirements": {
        "setupChecked": true,
        "complianceChecked": true,
        "card": "no",
        "freeTier": true,
        "minutes": 15,
        "credential": "oauth",
        "hosting": [
          "global",
          "US",
          "EU"
        ],
        "euResidency": "enterprise",
        "trainsOnData": "no",
        "zeroRetention": "no",
        "certifications": [
          "SOC 2 Type II",
          "ISO 27001",
          "ISO 27701",
          "HIPAA (BAA available)",
          "GDPR"
        ],
        "dpa": true,
        "selfHost": "no"
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/google-drive-api.json",
      "live": {
        "slug": "google-drive-api",
        "probe": {
          "target": "https://www.googleapis.com/drive/v3",
          "method": "get",
          "lastAt": "2026-11-07T18:20:27.627281058Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 185,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 124,
          "p95ms24h": 173,
          "samples24h": 239,
          "samples30d": 7910,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.google.com/appsstatus/dashboard",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-03T15:03:38.968480218Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "googleapis/google-api-nodejs-client",
            "version": "curationpartners-v3.1.0",
            "released": "2026-10-30",
            "seenAt": "2026-11-06T23:29:20.862237792Z"
          },
          {
            "registry": "npm",
            "name": "@googleapis/drive",
            "version": "27.0.0",
            "seenAt": "2026-11-06T23:29:20.484201068Z"
          },
          {
            "registry": "pypi",
            "name": "google-api-python-client",
            "version": "2.201.0",
            "released": "2026-09-30",
            "seenAt": "2026-11-06T23:29:20.717839346Z"
          }
        ],
        "githubStars": 12287,
        "npmWeekly": 1556101,
        "pypiWeekly": 33118233,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-11-07T16:01:22.068349931Z"
        },
        "domain": {
          "domain": "google.com",
          "registered": "1997-09-15",
          "source": "https://rdap.verisign.com/com/v1/domain/google.com",
          "checkedAt": "2026-11-01T14:17:18.719851913Z"
        },
        "pages": [
          {
            "url": "https://developers.google.com/workspace/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:04:30.063605793Z",
            "changedAt": "2026-11-06T13:27:05.53741557Z",
            "fingerprint": "5de41b40502a"
          },
          {
            "url": "https://developers.google.com/workspace/drive/release-notes",
            "kind": "deprecations",
            "status": 200,
            "checkedAt": "2026-11-07T14:04:21.444463337Z",
            "changedAt": "2026-11-03T07:45:49.599993757Z",
            "fingerprint": "fdc8f57bbbbf"
          }
        ],
        "mcpTools": {
          "url": "https://drivemcp.googleapis.com/mcp/v1",
          "checkedAt": "2026-11-07T01:45:16.132985924Z",
          "status": "ok",
          "protocol": "2026-07-28",
          "tools": [
            {
              "name": "copy_file",
              "description": "Call this tool to copy an existing File in Google Drive.\nThe tool allows specifying a new title and a parent folder for the copy.\nIf the title is not specified, the copy title will be 'Copy of {original title}'.\nIf the parent folder is not specified, the copy will be created in the same folder as the original file, unless the requesting user does not have write access to that folder, in which case the copy will be created in the user's root folder.\nPregenerated file IDs (`pregeneratedId`, obtained from `generate_ids`) are supported when copying non-Google Workspace files.\nReturns the newly created File object upon successful copying.\n",
              "inputSchema": {
                "description": "Request to copy a file.",
                "properties": {
                  "fileId": {
                    "description": "Required. The ID of the file to copy.",
                    "type": "string"
                  },
                  "parentId": {
                    "description": "The parent id of the newly created file. If empty, the file will be created with the same parent as the original file.",
                    "type": "string"
                  },
                  "pregeneratedId": {
                    "description": "Optional. The pregenerated id of the newly created file, obtained from the `generate_ids` tool. Supported for binary/blob files; not supported for native Google Workspace document types.",
                    "type": "string"
                  },
                  "title": {
                    "description": "The title of the newly created file. If empty, the title will be 'Copy of {original file title}'.",
                    "type": "string"
                  }
                },
                "required": [
                  "fileId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "DownloadRestriction": {
                    "description": "Restrictions applied to downloading, printing, and copying a file.",
                    "properties": {
                      "restrictedReader": {
                        "description": "Optional. Whether download, print, and copy are restricted for readers (viewers) and commenters.",
                        "type": "boolean"
                      },
                      "restrictedWriter": {
                        "description": "Optional. Whether download, print, and copy are restricted for writers (editors). If true, download, print, and copy are also restricted for readers and commenters.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FileCapabilities": {
                    "description": "Capabilities of the file for the requester.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Output only. Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canEdit": {
                        "description": "Output only. Whether the requester can edit this file.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canMoveItemWithinDrive": {
                        "description": "Output only. Whether the requester can move this item within its drive (My Drive or shared drive).",
                        "readOnly": true,
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FolderProperties": {
                    "description": "Properties specific to folders.",
                    "properties": {
                      "syncFolder": {
                        "description": "Whether the folder is a synced folder from a computer or device.",
                        "type": "boolean"
                      },
                      "syncedComputer": {
                        "description": "Whether the folder is the root folder representing a synced computer or device.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FollowUp": {
                    "description": "An open item on a file that needs the requesting user's attention (Drive \"Follow-up\"). Mirrors drive.ActionItem.",
                    "properties": {
                      "commentId": {
                        "description": "Output only. The id of the comment thread that needs attention. Matches CommentThread.comment_id.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "type": {
                        "description": "Output only. The kind of follow-up.",
                        "enum": [
                          "TYPE_UNSPECIFIED",
                          "ASSIGNMENT",
                          "SUGGESTION"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Unspecified type.",
                          "An open comment thread assigned to the requesting user.",
                          "An open suggested edit on a file the requesting user owns."
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "ProjectMetadata": {
                    "description": "Metadata of a Drive Project container.",
                    "properties": {
                      "emoji": {
                        "description": "The project emoji.",
                        "type": "string"
                      },
                      "missionStatement": {
                        "deprecated": true,
                        "description": "Deprecated: use purpose.",
                        "type": "string"
                      },
                      "purpose": {
                        "description": "The project purpose.",
                        "type": "string"
                      },
                      "sources": {
                        "description": "Sources attached to the project.",
                        "items": {
                          "$ref": "#/$defs/Source"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "ShortcutDetails": {
                    "description": "Details about the target of a shortcut file.",
                    "properties": {
                      "targetFileId": {
                        "description": "The ID of the file or folder that this shortcut points to. The target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      },
                      "targetMimeType": {
                        "description": "The MIME type of the shortcut's target as recorded when the shortcut was created. It is not refreshed if the target later changes, and the target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "Source": {
                    "description": "A source attached to the project.",
                    "properties": {
                      "fileId": {
                        "description": "The Drive item ID, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The MIME type of the Drive item, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "sourceId": {
                        "description": "Server-assigned identifier of the source within the project.",
                        "type": "string"
                      },
                      "sourceType": {
                        "description": "The type of source. `SOURCE_TYPE_UNSPECIFIED` if the type is unknown.",
                        "enum": [
                          "SOURCE_TYPE_UNSPECIFIED",
                          "DRIVE_ITEM_SOURCE",
                          "DRIVE_ITEM",
                          "URL_SOURCE",
                          "GMAIL_SOURCE",
                          "CHAT_SOURCE",
                          "CALENDAR_SOURCE"
                        ],
                        "type": "string",
                        "x-google-enum-deprecated": [
                          false,
                          false,
                          true,
                          false,
                          false,
                          false,
                          false
                        ],
                        "x-google-enum-descriptions": [
                          "Not specified. In requests, treated identically to `DRIVE_ITEM_SOURCE`. In responses, the source type is unknown.",
                          "A Drive file or folder, identified by its Drive item ID.",
                          "Deprecated: use `DRIVE_ITEM_SOURCE`.",
                          "A web URL. Not yet supported in requests.",
                          "A Gmail thread. Not yet supported in requests.",
                          "A Google Chat space or message. Not yet supported in requests.",
                          "A Google Calendar event. Not yet supported in requests."
                        ]
                      },
                      "title": {
                        "description": "Human-readable title of the source, if applicable.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "A file resource.",
                "properties": {
                  "canAddChildren": {
                    "description": "Whether the requester can add children to this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "capabilities": {
                    "$ref": "#/$defs/FileCapabilities",
                    "description": "Output only. Capabilities of the file for the requester.",
                    "readOnly": true
                  },
                  "contentSnippet": {
                    "description": "Generated snippet about the content of the file.",
                    "type": "string"
                  },
                  "createdTime": {
                    "description": "The time that the file was created.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "description": {
                    "description": "The description of the file.",
                    "type": "string"
                  },
                  "downloadRestriction": {
                    "$ref": "#/$defs/DownloadRestriction",
                    "description": "Optional. Restrictions applied to downloading, printing, and copying the file."
                  },
                  "etag": {
                    "description": "Output only. An opaque version identifier for the file that changes whenever the file is modified.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "fileExtension": {
                    "description": "The original file extension of the file, this is only populated for files with content stored in Drive.",
                    "type": "string"
                  },
                  "fileSize": {
                    "description": "The size in bytes of the file.",
                    "format": "int64",
                    "type": "string"
                  },
                  "folderProperties": {
                    "$ref": "#/$defs/FolderProperties",
                    "description": "Populated only for folders with special properties."
                  },
                  "followUps": {
                    "description": "Output only. Open follow-ups on this file for the requesting user. Empty when the user has nothing to act on.",
                    "items": {
                      "$ref": "#/$defs/FollowUp"
                    },
                    "readOnly": true,
                    "type": "array"
                  },
                  "id": {
                    "description": "The id of the file that was fetched.",
                    "type": "string"
                  },
                  "inheritedPermissionsDisabled": {
                    "description": "Whether inherited permissions are disabled on this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "lastCommentedTime": {
                    "description": "Output only. The time at which the file was last commented on. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "format": "date-time",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserEmail": {
                    "description": "Output only. Email address of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserName": {
                    "description": "Output only. Display name of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "mimeType": {
                    "description": "The mime type of the file.",
                    "type": "string"
                  },
                  "modifiedTime": {
                    "description": "The most recent time at which the file was modified.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "owner": {
                    "description": "The email address of the owner of the file.",
                    "type": "string"
                  },
                  "ownerName": {
                    "description": "Output only. Display name of the owner of the file. See `owner` for the email address. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "parentId": {
                    "description": "The (optional) id of the parent of the file.",
                    "type": "string"
                  },
                  "projectMetadata": {
                    "$ref": "#/$defs/ProjectMetadata",
                    "description": "Output only. Populated only for Drive Projects (mime_type = \"application/vnd.google-apps.project\") when project details are requested. Top-level File fields describe the project item itself.",
                    "readOnly": true
                  },
                  "readOnly": {
                    "description": "Whether the content of the file is read-only (locked).",
                    "type": "boolean"
                  },
                  "readOnlyReason": {
                    "description": "The reason why the file was put into a read-only (locked) state.",
                    "type": "string"
                  },
                  "resourceUri": {
                    "description": "The resource URI of the file.",
                    "type": "string"
                  },
                  "sharedDriveId": {
                    "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                    "type": "string"
                  },
                  "sharedWithMeTime": {
                    "description": "The time that the file was shared with the requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "shortcutDetails": {
                    "$ref": "#/$defs/ShortcutDetails",
                    "description": "Populated only for shortcut files (mime_type = \"application/vnd.google-apps.shortcut\"). Top-level File fields describe the shortcut item itself."
                  },
                  "starred": {
                    "description": "Whether the file has been starred.",
                    "type": "boolean"
                  },
                  "title": {
                    "description": "The title of the file.",
                    "type": "string"
                  },
                  "trashed": {
                    "description": "Whether the file is in the trash.",
                    "type": "boolean"
                  },
                  "viewUrl": {
                    "description": "The URL to view the file.",
                    "type": "string"
                  },
                  "viewedByMeTime": {
                    "description": "The most recent time at which the file was viewed by requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "visibility": {
                    "description": "Output only. Sharing visibility state of the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "enum": [
                      "VISIBILITY_UNSPECIFIED",
                      "PUBLIC",
                      "UNLISTED",
                      "PUBLIC_TO_DOMAIN",
                      "UNLISTED_TO_DOMAIN",
                      "PRIVATE"
                    ],
                    "readOnly": true,
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "Visibility is unspecified.",
                      "Anyone on the internet can find and access the item, including anonymous users.",
                      "Anyone with the link can access the item, including anonymous users.",
                      "Anyone in the owner's domain can access the item.",
                      "Anyone in the owner's domain who has the link can access the item.",
                      "The item is not shared with the link, to the domain, or to the public. Note that the item may still be shared with specific users or groups."
                    ]
                  },
                  "writersCanShare": {
                    "description": "Whether users with only writer permission can modify the file's permissions and share the file.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Copy file"
              }
            },
            {
              "name": "create_file",
              "description": "Call this tool to create or upload a File to Google Drive.\n\nIf uploading content, prefer `textContent` for text content. For non-UTF8 contents, use the `base64Content` field and base64 encode the data to set on that field.\n\nReturns a single File object upon successful creation.\n\nThe following Google first-party mime types can be created without providing content:\n\n - `application/vnd.google-apps.document` \n - `application/vnd.google-apps.spreadsheet` \n - `application/vnd.google-apps.presentation` \n\nFolders can be created by setting the mime type to `application/vnd.google-apps.folder`.\n\nWhen uploading content, the `contentMimeType` field is required and should match the type of the content being uploaded.\n\nBy default, supported content will be converted to Google first-party mime types.\n\nTo disable conversions for first-party mime types, set `disableConversionToGoogleType` to true.\n\nPregenerated file IDs (`pregeneratedId`, obtained from `generate_ids`) are supported for non-Google Workspace files and folders (`application/vnd.google-apps.folder`). When uploading content with `pregeneratedId`, `disableConversionToGoogleType` must be set to true.\n",
              "inputSchema": {
                "description": "Request to upload a file.",
                "properties": {
                  "base64Content": {
                    "description": "Optional. The base64 encoded content to upload. It's an error to set this and `textContent`.",
                    "type": "string"
                  },
                  "content": {
                    "deprecated": true,
                    "description": "Deprecated: Use `base64Content` or `textContent` instead. The content of the file encoded as base64. The content field should always be base64 encoded regardless of the mime type of the file.",
                    "type": "string"
                  },
                  "contentMimeType": {
                    "description": "The mime type of the content being uploaded. Required when any type of content is provided.",
                    "type": "string"
                  },
                  "disableConversionToGoogleType": {
                    "description": "Set to true to retain the passed in content mime type and not convert to a Google type. For example, without this a `text/plain` content mime type will be converted to to `application/vnd.google-apps.document`. Has no effect for types that do not have a Google equivalent.",
                    "type": "boolean"
                  },
                  "inheritedPermissionsDisabled": {
                    "description": "Set to true to disable inherited permissions on the created folder, restricting access to only users with direct permissions on the folder.",
                    "type": "boolean"
                  },
                  "mimeType": {
                    "deprecated": true,
                    "description": "Deprecated: DO NOT USE!! Set `contentMimeType` instead.",
                    "type": "string"
                  },
                  "parentId": {
                    "description": "The parent id of the file.",
                    "type": "string"
                  },
                  "pregeneratedId": {
                    "description": "Optional. The pregenerated id of the file to create, obtained from the `generate_ids` tool. Supported for binary/blob files and folders (`application/vnd.google-apps.folder`); not supported for native Google Workspace document types. When uploading content with a pregenerated id, `disableConversionToGoogleType` must be set to true.",
                    "type": "string"
                  },
                  "textContent": {
                    "description": "Optional. The (UTF-8) text content to upload. It's an error to set this and `base64Content`.",
                    "type": "string"
                  },
                  "title": {
                    "description": "Required. The title of the file.",
                    "type": "string"
                  }
                },
                "required": [
                  "title"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "DownloadRestriction": {
                    "description": "Restrictions applied to downloading, printing, and copying a file.",
                    "properties": {
                      "restrictedReader": {
                        "description": "Optional. Whether download, print, and copy are restricted for readers (viewers) and commenters.",
                        "type": "boolean"
                      },
                      "restrictedWriter": {
                        "description": "Optional. Whether download, print, and copy are restricted for writers (editors). If true, download, print, and copy are also restricted for readers and commenters.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FileCapabilities": {
                    "description": "Capabilities of the file for the requester.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Output only. Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canEdit": {
                        "description": "Output only. Whether the requester can edit this file.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canMoveItemWithinDrive": {
                        "description": "Output only. Whether the requester can move this item within its drive (My Drive or shared drive).",
                        "readOnly": true,
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FolderProperties": {
                    "description": "Properties specific to folders.",
                    "properties": {
                      "syncFolder": {
                        "description": "Whether the folder is a synced folder from a computer or device.",
                        "type": "boolean"
                      },
                      "syncedComputer": {
                        "description": "Whether the folder is the root folder representing a synced computer or device.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FollowUp": {
                    "description": "An open item on a file that needs the requesting user's attention (Drive \"Follow-up\"). Mirrors drive.ActionItem.",
                    "properties": {
                      "commentId": {
                        "description": "Output only. The id of the comment thread that needs attention. Matches CommentThread.comment_id.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "type": {
                        "description": "Output only. The kind of follow-up.",
                        "enum": [
                          "TYPE_UNSPECIFIED",
                          "ASSIGNMENT",
                          "SUGGESTION"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Unspecified type.",
                          "An open comment thread assigned to the requesting user.",
                          "An open suggested edit on a file the requesting user owns."
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "ProjectMetadata": {
                    "description": "Metadata of a Drive Project container.",
                    "properties": {
                      "emoji": {
                        "description": "The project emoji.",
                        "type": "string"
                      },
                      "missionStatement": {
                        "deprecated": true,
                        "description": "Deprecated: use purpose.",
                        "type": "string"
                      },
                      "purpose": {
                        "description": "The project purpose.",
                        "type": "string"
                      },
                      "sources": {
                        "description": "Sources attached to the project.",
                        "items": {
                          "$ref": "#/$defs/Source"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "ShortcutDetails": {
                    "description": "Details about the target of a shortcut file.",
                    "properties": {
                      "targetFileId": {
                        "description": "The ID of the file or folder that this shortcut points to. The target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      },
                      "targetMimeType": {
                        "description": "The MIME type of the shortcut's target as recorded when the shortcut was created. It is not refreshed if the target later changes, and the target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "Source": {
                    "description": "A source attached to the project.",
                    "properties": {
                      "fileId": {
                        "description": "The Drive item ID, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The MIME type of the Drive item, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "sourceId": {
                        "description": "Server-assigned identifier of the source within the project.",
                        "type": "string"
                      },
                      "sourceType": {
                        "description": "The type of source. `SOURCE_TYPE_UNSPECIFIED` if the type is unknown.",
                        "enum": [
                          "SOURCE_TYPE_UNSPECIFIED",
                          "DRIVE_ITEM_SOURCE",
                          "DRIVE_ITEM",
                          "URL_SOURCE",
                          "GMAIL_SOURCE",
                          "CHAT_SOURCE",
                          "CALENDAR_SOURCE"
                        ],
                        "type": "string",
                        "x-google-enum-deprecated": [
                          false,
                          false,
                          true,
                          false,
                          false,
                          false,
                          false
                        ],
                        "x-google-enum-descriptions": [
                          "Not specified. In requests, treated identically to `DRIVE_ITEM_SOURCE`. In responses, the source type is unknown.",
                          "A Drive file or folder, identified by its Drive item ID.",
                          "Deprecated: use `DRIVE_ITEM_SOURCE`.",
                          "A web URL. Not yet supported in requests.",
                          "A Gmail thread. Not yet supported in requests.",
                          "A Google Chat space or message. Not yet supported in requests.",
                          "A Google Calendar event. Not yet supported in requests."
                        ]
                      },
                      "title": {
                        "description": "Human-readable title of the source, if applicable.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "A file resource.",
                "properties": {
                  "canAddChildren": {
                    "description": "Whether the requester can add children to this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "capabilities": {
                    "$ref": "#/$defs/FileCapabilities",
                    "description": "Output only. Capabilities of the file for the requester.",
                    "readOnly": true
                  },
                  "contentSnippet": {
                    "description": "Generated snippet about the content of the file.",
                    "type": "string"
                  },
                  "createdTime": {
                    "description": "The time that the file was created.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "description": {
                    "description": "The description of the file.",
                    "type": "string"
                  },
                  "downloadRestriction": {
                    "$ref": "#/$defs/DownloadRestriction",
                    "description": "Optional. Restrictions applied to downloading, printing, and copying the file."
                  },
                  "etag": {
                    "description": "Output only. An opaque version identifier for the file that changes whenever the file is modified.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "fileExtension": {
                    "description": "The original file extension of the file, this is only populated for files with content stored in Drive.",
                    "type": "string"
                  },
                  "fileSize": {
                    "description": "The size in bytes of the file.",
                    "format": "int64",
                    "type": "string"
                  },
                  "folderProperties": {
                    "$ref": "#/$defs/FolderProperties",
                    "description": "Populated only for folders with special properties."
                  },
                  "followUps": {
                    "description": "Output only. Open follow-ups on this file for the requesting user. Empty when the user has nothing to act on.",
                    "items": {
                      "$ref": "#/$defs/FollowUp"
                    },
                    "readOnly": true,
                    "type": "array"
                  },
                  "id": {
                    "description": "The id of the file that was fetched.",
                    "type": "string"
                  },
                  "inheritedPermissionsDisabled": {
                    "description": "Whether inherited permissions are disabled on this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "lastCommentedTime": {
                    "description": "Output only. The time at which the file was last commented on. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "format": "date-time",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserEmail": {
                    "description": "Output only. Email address of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserName": {
                    "description": "Output only. Display name of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "mimeType": {
                    "description": "The mime type of the file.",
                    "type": "string"
                  },
                  "modifiedTime": {
                    "description": "The most recent time at which the file was modified.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "owner": {
                    "description": "The email address of the owner of the file.",
                    "type": "string"
                  },
                  "ownerName": {
                    "description": "Output only. Display name of the owner of the file. See `owner` for the email address. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "parentId": {
                    "description": "The (optional) id of the parent of the file.",
                    "type": "string"
                  },
                  "projectMetadata": {
                    "$ref": "#/$defs/ProjectMetadata",
                    "description": "Output only. Populated only for Drive Projects (mime_type = \"application/vnd.google-apps.project\") when project details are requested. Top-level File fields describe the project item itself.",
                    "readOnly": true
                  },
                  "readOnly": {
                    "description": "Whether the content of the file is read-only (locked).",
                    "type": "boolean"
                  },
                  "readOnlyReason": {
                    "description": "The reason why the file was put into a read-only (locked) state.",
                    "type": "string"
                  },
                  "resourceUri": {
                    "description": "The resource URI of the file.",
                    "type": "string"
                  },
                  "sharedDriveId": {
                    "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                    "type": "string"
                  },
                  "sharedWithMeTime": {
                    "description": "The time that the file was shared with the requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "shortcutDetails": {
                    "$ref": "#/$defs/ShortcutDetails",
                    "description": "Populated only for shortcut files (mime_type = \"application/vnd.google-apps.shortcut\"). Top-level File fields describe the shortcut item itself."
                  },
                  "starred": {
                    "description": "Whether the file has been starred.",
                    "type": "boolean"
                  },
                  "title": {
                    "description": "The title of the file.",
                    "type": "string"
                  },
                  "trashed": {
                    "description": "Whether the file is in the trash.",
                    "type": "boolean"
                  },
                  "viewUrl": {
                    "description": "The URL to view the file.",
                    "type": "string"
                  },
                  "viewedByMeTime": {
                    "description": "The most recent time at which the file was viewed by requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "visibility": {
                    "description": "Output only. Sharing visibility state of the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "enum": [
                      "VISIBILITY_UNSPECIFIED",
                      "PUBLIC",
                      "UNLISTED",
                      "PUBLIC_TO_DOMAIN",
                      "UNLISTED_TO_DOMAIN",
                      "PRIVATE"
                    ],
                    "readOnly": true,
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "Visibility is unspecified.",
                      "Anyone on the internet can find and access the item, including anonymous users.",
                      "Anyone with the link can access the item, including anonymous users.",
                      "Anyone in the owner's domain can access the item.",
                      "Anyone in the owner's domain who has the link can access the item.",
                      "The item is not shared with the link, to the domain, or to the public. Note that the item may still be shared with specific users or groups."
                    ]
                  },
                  "writersCanShare": {
                    "description": "Whether users with only writer permission can modify the file's permissions and share the file.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": true,
                "readOnlyHint": false,
                "title": "Create file"
              }
            },
            {
              "name": "download_file_content",
              "description": "Call this tool to download the content of a Drive file as a base64 encoded string.\n\nIf the file is a Google Drive first-party mime type, the `exportMimeType` field specifies the desired export mime type. When the field is unset, defaults to plain text types (e.g. `text/plain`, `text/csv`).\n\nIf the file is not found, try using other tools like `search_files` to find the file the user is requesting.\n\nIf the user wants a natural language representation of their Drive content, use the `read_file_content` tool (`read_file_content` should be smaller and easier to parse).\n",
              "inputSchema": {
                "description": "Defines a request to download a file's content.",
                "properties": {
                  "exportMimeType": {
                    "description": "Optional. For Google native files, the MIME type to export the file to, ignored otherwise. Defaults to text if not specified.",
                    "type": "string"
                  },
                  "fileId": {
                    "description": "Required. The ID of the file to retrieve.",
                    "type": "string"
                  },
                  "revisionId": {
                    "description": "Optional. The revision id for the version of the file to download. If not specified, the latest revision will be downloaded.",
                    "type": "string"
                  }
                },
                "required": [
                  "fileId"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Download file content"
              }
            },
            {
              "name": "get_file_metadata",
              "description": "Call this tool to find general metadata about a user's Drive file.\n\nContext window token management can be tuned via `snippetVerbosity` (default is `SnippetVerbosity.DETAILED`) or if only metadata is needed, use `excludeContentSnippets`.\n\nIf the file is not found, try using other tools like `search_files` to find the file the user is requesting.\n",
              "inputSchema": {
                "description": "Request to get the file.",
                "properties": {
                  "excludeContentSnippets": {
                    "description": "If `true`, the content snippet will be excluded from the response. Must not be set to `true` if `snippet_verbosity` is specified.",
                    "type": "boolean"
                  },
                  "fileId": {
                    "description": "Required. The ID of the file to retrieve.",
                    "type": "string"
                  },
                  "includeRichMetadata": {
                    "description": "Optional. When true, also returns `owner_name`, `last_modifying_user_name`, `last_modifying_user_email`, `visibility`, and `last_commented_time`. Defaults to `false`.",
                    "type": "boolean"
                  },
                  "snippetVerbosity": {
                    "description": "Optional. Set to specify how verbose the snippets should be. Defaults to `DETAILED` if not set. Must not be set if `exclude_content_snippets` is `true`.",
                    "enum": [
                      "UNSPECIFIED",
                      "BRIEF",
                      "MEDIUM",
                      "DETAILED",
                      "MAX_ALLOWED"
                    ],
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "",
                      "Limits the returned snippet to about 1000 characters.",
                      "Limits the returned snippet to about 2500 characters.",
                      "Limits the returned snippet to about 5000 characters.",
                      "The verbosity is greatly increased, limited by the overall response size."
                    ]
                  }
                },
                "required": [
                  "fileId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "DownloadRestriction": {
                    "description": "Restrictions applied to downloading, printing, and copying a file.",
                    "properties": {
                      "restrictedReader": {
                        "description": "Optional. Whether download, print, and copy are restricted for readers (viewers) and commenters.",
                        "type": "boolean"
                      },
                      "restrictedWriter": {
                        "description": "Optional. Whether download, print, and copy are restricted for writers (editors). If true, download, print, and copy are also restricted for readers and commenters.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FileCapabilities": {
                    "description": "Capabilities of the file for the requester.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Output only. Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canEdit": {
                        "description": "Output only. Whether the requester can edit this file.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canMoveItemWithinDrive": {
                        "description": "Output only. Whether the requester can move this item within its drive (My Drive or shared drive).",
                        "readOnly": true,
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FolderProperties": {
                    "description": "Properties specific to folders.",
                    "properties": {
                      "syncFolder": {
                        "description": "Whether the folder is a synced folder from a computer or device.",
                        "type": "boolean"
                      },
                      "syncedComputer": {
                        "description": "Whether the folder is the root folder representing a synced computer or device.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FollowUp": {
                    "description": "An open item on a file that needs the requesting user's attention (Drive \"Follow-up\"). Mirrors drive.ActionItem.",
                    "properties": {
                      "commentId": {
                        "description": "Output only. The id of the comment thread that needs attention. Matches CommentThread.comment_id.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "type": {
                        "description": "Output only. The kind of follow-up.",
                        "enum": [
                          "TYPE_UNSPECIFIED",
                          "ASSIGNMENT",
                          "SUGGESTION"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Unspecified type.",
                          "An open comment thread assigned to the requesting user.",
                          "An open suggested edit on a file the requesting user owns."
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "ProjectMetadata": {
                    "description": "Metadata of a Drive Project container.",
                    "properties": {
                      "emoji": {
                        "description": "The project emoji.",
                        "type": "string"
                      },
                      "missionStatement": {
                        "deprecated": true,
                        "description": "Deprecated: use purpose.",
                        "type": "string"
                      },
                      "purpose": {
                        "description": "The project purpose.",
                        "type": "string"
                      },
                      "sources": {
                        "description": "Sources attached to the project.",
                        "items": {
                          "$ref": "#/$defs/Source"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "ShortcutDetails": {
                    "description": "Details about the target of a shortcut file.",
                    "properties": {
                      "targetFileId": {
                        "description": "The ID of the file or folder that this shortcut points to. The target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      },
                      "targetMimeType": {
                        "description": "The MIME type of the shortcut's target as recorded when the shortcut was created. It is not refreshed if the target later changes, and the target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "Source": {
                    "description": "A source attached to the project.",
                    "properties": {
                      "fileId": {
                        "description": "The Drive item ID, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The MIME type of the Drive item, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "sourceId": {
                        "description": "Server-assigned identifier of the source within the project.",
                        "type": "string"
                      },
                      "sourceType": {
                        "description": "The type of source. `SOURCE_TYPE_UNSPECIFIED` if the type is unknown.",
                        "enum": [
                          "SOURCE_TYPE_UNSPECIFIED",
                          "DRIVE_ITEM_SOURCE",
                          "DRIVE_ITEM",
                          "URL_SOURCE",
                          "GMAIL_SOURCE",
                          "CHAT_SOURCE",
                          "CALENDAR_SOURCE"
                        ],
                        "type": "string",
                        "x-google-enum-deprecated": [
                          false,
                          false,
                          true,
                          false,
                          false,
                          false,
                          false
                        ],
                        "x-google-enum-descriptions": [
                          "Not specified. In requests, treated identically to `DRIVE_ITEM_SOURCE`. In responses, the source type is unknown.",
                          "A Drive file or folder, identified by its Drive item ID.",
                          "Deprecated: use `DRIVE_ITEM_SOURCE`.",
                          "A web URL. Not yet supported in requests.",
                          "A Gmail thread. Not yet supported in requests.",
                          "A Google Chat space or message. Not yet supported in requests.",
                          "A Google Calendar event. Not yet supported in requests."
                        ]
                      },
                      "title": {
                        "description": "Human-readable title of the source, if applicable.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "A file resource.",
                "properties": {
                  "canAddChildren": {
                    "description": "Whether the requester can add children to this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "capabilities": {
                    "$ref": "#/$defs/FileCapabilities",
                    "description": "Output only. Capabilities of the file for the requester.",
                    "readOnly": true
                  },
                  "contentSnippet": {
                    "description": "Generated snippet about the content of the file.",
                    "type": "string"
                  },
                  "createdTime": {
                    "description": "The time that the file was created.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "description": {
                    "description": "The description of the file.",
                    "type": "string"
                  },
                  "downloadRestriction": {
                    "$ref": "#/$defs/DownloadRestriction",
                    "description": "Optional. Restrictions applied to downloading, printing, and copying the file."
                  },
                  "etag": {
                    "description": "Output only. An opaque version identifier for the file that changes whenever the file is modified.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "fileExtension": {
                    "description": "The original file extension of the file, this is only populated for files with content stored in Drive.",
                    "type": "string"
                  },
                  "fileSize": {
                    "description": "The size in bytes of the file.",
                    "format": "int64",
                    "type": "string"
                  },
                  "folderProperties": {
                    "$ref": "#/$defs/FolderProperties",
                    "description": "Populated only for folders with special properties."
                  },
                  "followUps": {
                    "description": "Output only. Open follow-ups on this file for the requesting user. Empty when the user has nothing to act on.",
                    "items": {
                      "$ref": "#/$defs/FollowUp"
                    },
                    "readOnly": true,
                    "type": "array"
                  },
                  "id": {
                    "description": "The id of the file that was fetched.",
                    "type": "string"
                  },
                  "inheritedPermissionsDisabled": {
                    "description": "Whether inherited permissions are disabled on this folder. This is always false for non-folder types.",
                    "type": "boolean"
                  },
                  "lastCommentedTime": {
                    "description": "Output only. The time at which the file was last commented on. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "format": "date-time",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserEmail": {
                    "description": "Output only. Email address of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "lastModifyingUserName": {
                    "description": "Output only. Display name of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "mimeType": {
                    "description": "The mime type of the file.",
                    "type": "string"
                  },
                  "modifiedTime": {
                    "description": "The most recent time at which the file was modified.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "owner": {
                    "description": "The email address of the owner of the file.",
                    "type": "string"
                  },
                  "ownerName": {
                    "description": "Output only. Display name of the owner of the file. See `owner` for the email address. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "readOnly": true,
                    "type": "string"
                  },
                  "parentId": {
                    "description": "The (optional) id of the parent of the file.",
                    "type": "string"
                  },
                  "projectMetadata": {
                    "$ref": "#/$defs/ProjectMetadata",
                    "description": "Output only. Populated only for Drive Projects (mime_type = \"application/vnd.google-apps.project\") when project details are requested. Top-level File fields describe the project item itself.",
                    "readOnly": true
                  },
                  "readOnly": {
                    "description": "Whether the content of the file is read-only (locked).",
                    "type": "boolean"
                  },
                  "readOnlyReason": {
                    "description": "The reason why the file was put into a read-only (locked) state.",
                    "type": "string"
                  },
                  "resourceUri": {
                    "description": "The resource URI of the file.",
                    "type": "string"
                  },
                  "sharedDriveId": {
                    "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                    "type": "string"
                  },
                  "sharedWithMeTime": {
                    "description": "The time that the file was shared with the requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "shortcutDetails": {
                    "$ref": "#/$defs/ShortcutDetails",
                    "description": "Populated only for shortcut files (mime_type = \"application/vnd.google-apps.shortcut\"). Top-level File fields describe the shortcut item itself."
                  },
                  "starred": {
                    "description": "Whether the file has been starred.",
                    "type": "boolean"
                  },
                  "title": {
                    "description": "The title of the file.",
                    "type": "string"
                  },
                  "trashed": {
                    "description": "Whether the file is in the trash.",
                    "type": "boolean"
                  },
                  "viewUrl": {
                    "description": "The URL to view the file.",
                    "type": "string"
                  },
                  "viewedByMeTime": {
                    "description": "The most recent time at which the file was viewed by requester.",
                    "format": "date-time",
                    "type": "string"
                  },
                  "visibility": {
                    "description": "Output only. Sharing visibility state of the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                    "enum": [
                      "VISIBILITY_UNSPECIFIED",
                      "PUBLIC",
                      "UNLISTED",
                      "PUBLIC_TO_DOMAIN",
                      "UNLISTED_TO_DOMAIN",
                      "PRIVATE"
                    ],
                    "readOnly": true,
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "Visibility is unspecified.",
                      "Anyone on the internet can find and access the item, including anonymous users.",
                      "Anyone with the link can access the item, including anonymous users.",
                      "Anyone in the owner's domain can access the item.",
                      "Anyone in the owner's domain who has the link can access the item.",
                      "The item is not shared with the link, to the domain, or to the public. Note that the item may still be shared with specific users or groups."
                    ]
                  },
                  "writersCanShare": {
                    "description": "Whether users with only writer permission can modify the file's permissions and share the file.",
                    "type": "boolean"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get file metadata"
              }
            },
            {
              "name": "get_file_permissions",
              "description": "Call this tool to list the permissions of a Drive File.\n",
              "inputSchema": {
                "description": "Request to get file permissions.",
                "properties": {
                  "fileId": {
                    "description": "Required. The ID of the file to get permissions for.",
                    "type": "string"
                  }
                },
                "required": [
                  "fileId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "Permission": {
                    "description": "A permission for a file.",
                    "properties": {
                      "chatSpaceId": {
                        "description": "The resource name of the Google Chat space, in the format `spaces/{space}`. Empty if this permission is not for a Google Chat space.",
                        "type": "string"
                      },
                      "displayName": {
                        "description": "Output only. The \"pretty\" name of the value of the permission. The following is a list of examples for each type of permission: * `user` - User's full name, as defined for their Google Account, such as \"Dana A.\" * `group` - Name of the Google Group, such as \"The Company Administrators.\" * `domain` - String domain name, such as \"cymbalgroup.com.\" * `anyone` - No `displayName` is present.",
                        "type": "string"
                      },
                      "emailAddress": {
                        "description": "The email address of the user or group to which this permission refers.",
                        "type": "string"
                      },
                      "expirationTime": {
                        "description": "The time at which this permission will expire. If not set, the permission does not expire.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "id": {
                        "description": "Output only. A unique identifier for the grantee. IDs should be treated as opaque values, except for `\"anyoneWithLink\"`, which indicates public link sharing.",
                        "type": "string"
                      },
                      "pendingOwner": {
                        "description": "Output only. Indicates whether the account associated with this permission is a pending owner, i.e. an ownership transfer has been requested and is awaiting their acceptance. Only populated when true, for `user` permissions on items that are not in a shared drive.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "role": {
                        "description": "The role of the grantee for the file. The possible roles include: * `owner` * `organizer` * `fileOrganizer` * `writer` * `commenter` * `reader`",
                        "type": "string"
                      },
                      "type": {
                        "description": "The type of the grantee. Supported values include: * `user` * `group` * `domain` * `anyone`",
                        "type": "string"
                      },
                      "view": {
                        "description": "Specifies the view to which this permission applies, if any. Supported values include: * `published` * `metadata`",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "Response to get file permissions.",
                "properties": {
                  "permissions": {
                    "description": "The list of permissions.",
                    "items": {
                      "$ref": "#/$defs/Permission"
                    },
                    "type": "array"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Get file permissions"
              }
            },
            {
              "name": "list_recent_files",
              "description": "Call this tool to find recent files for a user specified a sort order. Default sort order is `recency` if orderBy is not set or set to an unsupported value.\n\nContext window token management can be tuned via `snippetVerbosity` (default is `SnippetVerbosity.DETAILED`) or if only metadata is needed, use `excludeContentSnippets`.\n\nSupported sort orders are:\n\n - `recency`: The most recent timestamp from the file's date-time fields.\n - `lastModified`: The last time the file was modified by anyone.\n - `lastModifiedByMe`: The last time the file was modified by the user.\n\nThe default page size is 10. Utilize `next_page_token` to paginate through the results.\n",
              "inputSchema": {
                "description": "Request to list files.",
                "properties": {
                  "excludeContentSnippets": {
                    "description": "If `true`, the content snippet will be excluded from the response. Must not be set to `true` if `snippet_verbosity` is specified.",
                    "type": "boolean"
                  },
                  "orderBy": {
                    "description": "The sort order for the files.",
                    "type": "string"
                  },
                  "pageSize": {
                    "description": "The maximum number of files to return.",
                    "format": "int32",
                    "type": "integer"
                  },
                  "pageToken": {
                    "description": "The page token to use for pagination.",
                    "type": "string"
                  },
                  "snippetVerbosity": {
                    "description": "Optional. Set to specify how verbose the snippets should be. Defaults to `DETAILED` if not set. Must not be set if `exclude_content_snippets` is `true`.",
                    "enum": [
                      "UNSPECIFIED",
                      "BRIEF",
                      "MEDIUM",
                      "DETAILED",
                      "MAX_ALLOWED"
                    ],
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "",
                      "Limits the returned snippet to about 1000 characters.",
                      "Limits the returned snippet to about 2500 characters.",
                      "Limits the returned snippet to about 5000 characters.",
                      "The verbosity is greatly increased, limited by the overall response size."
                    ]
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "DownloadRestriction": {
                    "description": "Restrictions applied to downloading, printing, and copying a file.",
                    "properties": {
                      "restrictedReader": {
                        "description": "Optional. Whether download, print, and copy are restricted for readers (viewers) and commenters.",
                        "type": "boolean"
                      },
                      "restrictedWriter": {
                        "description": "Optional. Whether download, print, and copy are restricted for writers (editors). If true, download, print, and copy are also restricted for readers and commenters.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "File": {
                    "description": "A file resource.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "type": "boolean"
                      },
                      "capabilities": {
                        "$ref": "#/$defs/FileCapabilities",
                        "description": "Output only. Capabilities of the file for the requester.",
                        "readOnly": true
                      },
                      "contentSnippet": {
                        "description": "Generated snippet about the content of the file.",
                        "type": "string"
                      },
                      "createdTime": {
                        "description": "The time that the file was created.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "description": {
                        "description": "The description of the file.",
                        "type": "string"
                      },
                      "downloadRestriction": {
                        "$ref": "#/$defs/DownloadRestriction",
                        "description": "Optional. Restrictions applied to downloading, printing, and copying the file."
                      },
                      "etag": {
                        "description": "Output only. An opaque version identifier for the file that changes whenever the file is modified.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "fileExtension": {
                        "description": "The original file extension of the file, this is only populated for files with content stored in Drive.",
                        "type": "string"
                      },
                      "fileSize": {
                        "description": "The size in bytes of the file.",
                        "format": "int64",
                        "type": "string"
                      },
                      "folderProperties": {
                        "$ref": "#/$defs/FolderProperties",
                        "description": "Populated only for folders with special properties."
                      },
                      "followUps": {
                        "description": "Output only. Open follow-ups on this file for the requesting user. Empty when the user has nothing to act on.",
                        "items": {
                          "$ref": "#/$defs/FollowUp"
                        },
                        "readOnly": true,
                        "type": "array"
                      },
                      "id": {
                        "description": "The id of the file that was fetched.",
                        "type": "string"
                      },
                      "inheritedPermissionsDisabled": {
                        "description": "Whether inherited permissions are disabled on this folder. This is always false for non-folder types.",
                        "type": "boolean"
                      },
                      "lastCommentedTime": {
                        "description": "Output only. The time at which the file was last commented on. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "format": "date-time",
                        "readOnly": true,
                        "type": "string"
                      },
                      "lastModifyingUserEmail": {
                        "description": "Output only. Email address of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "lastModifyingUserName": {
                        "description": "Output only. Display name of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The mime type of the file.",
                        "type": "string"
                      },
                      "modifiedTime": {
                        "description": "The most recent time at which the file was modified.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "owner": {
                        "description": "The email address of the owner of the file.",
                        "type": "string"
                      },
                      "ownerName": {
                        "description": "Output only. Display name of the owner of the file. See `owner` for the email address. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "parentId": {
                        "description": "The (optional) id of the parent of the file.",
                        "type": "string"
                      },
                      "projectMetadata": {
                        "$ref": "#/$defs/ProjectMetadata",
                        "description": "Output only. Populated only for Drive Projects (mime_type = \"application/vnd.google-apps.project\") when project details are requested. Top-level File fields describe the project item itself.",
                        "readOnly": true
                      },
                      "readOnly": {
                        "description": "Whether the content of the file is read-only (locked).",
                        "type": "boolean"
                      },
                      "readOnlyReason": {
                        "description": "The reason why the file was put into a read-only (locked) state.",
                        "type": "string"
                      },
                      "resourceUri": {
                        "description": "The resource URI of the file.",
                        "type": "string"
                      },
                      "sharedDriveId": {
                        "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                        "type": "string"
                      },
                      "sharedWithMeTime": {
                        "description": "The time that the file was shared with the requester.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "shortcutDetails": {
                        "$ref": "#/$defs/ShortcutDetails",
                        "description": "Populated only for shortcut files (mime_type = \"application/vnd.google-apps.shortcut\"). Top-level File fields describe the shortcut item itself."
                      },
                      "starred": {
                        "description": "Whether the file has been starred.",
                        "type": "boolean"
                      },
                      "title": {
                        "description": "The title of the file.",
                        "type": "string"
                      },
                      "trashed": {
                        "description": "Whether the file is in the trash.",
                        "type": "boolean"
                      },
                      "viewUrl": {
                        "description": "The URL to view the file.",
                        "type": "string"
                      },
                      "viewedByMeTime": {
                        "description": "The most recent time at which the file was viewed by requester.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "visibility": {
                        "description": "Output only. Sharing visibility state of the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "enum": [
                          "VISIBILITY_UNSPECIFIED",
                          "PUBLIC",
                          "UNLISTED",
                          "PUBLIC_TO_DOMAIN",
                          "UNLISTED_TO_DOMAIN",
                          "PRIVATE"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Visibility is unspecified.",
                          "Anyone on the internet can find and access the item, including anonymous users.",
                          "Anyone with the link can access the item, including anonymous users.",
                          "Anyone in the owner's domain can access the item.",
                          "Anyone in the owner's domain who has the link can access the item.",
                          "The item is not shared with the link, to the domain, or to the public. Note that the item may still be shared with specific users or groups."
                        ]
                      },
                      "writersCanShare": {
                        "description": "Whether users with only writer permission can modify the file's permissions and share the file.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FileCapabilities": {
                    "description": "Capabilities of the file for the requester.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Output only. Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canEdit": {
                        "description": "Output only. Whether the requester can edit this file.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canMoveItemWithinDrive": {
                        "description": "Output only. Whether the requester can move this item within its drive (My Drive or shared drive).",
                        "readOnly": true,
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FolderProperties": {
                    "description": "Properties specific to folders.",
                    "properties": {
                      "syncFolder": {
                        "description": "Whether the folder is a synced folder from a computer or device.",
                        "type": "boolean"
                      },
                      "syncedComputer": {
                        "description": "Whether the folder is the root folder representing a synced computer or device.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FollowUp": {
                    "description": "An open item on a file that needs the requesting user's attention (Drive \"Follow-up\"). Mirrors drive.ActionItem.",
                    "properties": {
                      "commentId": {
                        "description": "Output only. The id of the comment thread that needs attention. Matches CommentThread.comment_id.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "type": {
                        "description": "Output only. The kind of follow-up.",
                        "enum": [
                          "TYPE_UNSPECIFIED",
                          "ASSIGNMENT",
                          "SUGGESTION"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Unspecified type.",
                          "An open comment thread assigned to the requesting user.",
                          "An open suggested edit on a file the requesting user owns."
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "ProjectMetadata": {
                    "description": "Metadata of a Drive Project container.",
                    "properties": {
                      "emoji": {
                        "description": "The project emoji.",
                        "type": "string"
                      },
                      "missionStatement": {
                        "deprecated": true,
                        "description": "Deprecated: use purpose.",
                        "type": "string"
                      },
                      "purpose": {
                        "description": "The project purpose.",
                        "type": "string"
                      },
                      "sources": {
                        "description": "Sources attached to the project.",
                        "items": {
                          "$ref": "#/$defs/Source"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "ShortcutDetails": {
                    "description": "Details about the target of a shortcut file.",
                    "properties": {
                      "targetFileId": {
                        "description": "The ID of the file or folder that this shortcut points to. The target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      },
                      "targetMimeType": {
                        "description": "The MIME type of the shortcut's target as recorded when the shortcut was created. It is not refreshed if the target later changes, and the target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "Source": {
                    "description": "A source attached to the project.",
                    "properties": {
                      "fileId": {
                        "description": "The Drive item ID, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The MIME type of the Drive item, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "sourceId": {
                        "description": "Server-assigned identifier of the source within the project.",
                        "type": "string"
                      },
                      "sourceType": {
                        "description": "The type of source. `SOURCE_TYPE_UNSPECIFIED` if the type is unknown.",
                        "enum": [
                          "SOURCE_TYPE_UNSPECIFIED",
                          "DRIVE_ITEM_SOURCE",
                          "DRIVE_ITEM",
                          "URL_SOURCE",
                          "GMAIL_SOURCE",
                          "CHAT_SOURCE",
                          "CALENDAR_SOURCE"
                        ],
                        "type": "string",
                        "x-google-enum-deprecated": [
                          false,
                          false,
                          true,
                          false,
                          false,
                          false,
                          false
                        ],
                        "x-google-enum-descriptions": [
                          "Not specified. In requests, treated identically to `DRIVE_ITEM_SOURCE`. In responses, the source type is unknown.",
                          "A Drive file or folder, identified by its Drive item ID.",
                          "Deprecated: use `DRIVE_ITEM_SOURCE`.",
                          "A web URL. Not yet supported in requests.",
                          "A Gmail thread. Not yet supported in requests.",
                          "A Google Chat space or message. Not yet supported in requests.",
                          "A Google Calendar event. Not yet supported in requests."
                        ]
                      },
                      "title": {
                        "description": "Human-readable title of the source, if applicable.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "Response to list files.",
                "properties": {
                  "files": {
                    "description": "The list of files.",
                    "items": {
                      "$ref": "#/$defs/File"
                    },
                    "type": "array"
                  },
                  "nextPageToken": {
                    "description": "The next page token.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "List recent files"
              }
            },
            {
              "name": "read_file_content",
              "description": "Call this tool to fetch a natural language representation of a known Drive file, and if specified, its comments.\n\nREQUIREMENTS \u0026 WORKFLOW:\n - `fileId` is required. You MUST pass an exact Drive file ID returned by a previous discovery tool (`search_files` or `list_recent_files`) or provided explicitly in the user prompt.\n - If given a file title, name, or topic without an explicit `fileId`, you MUST FIRST call `search_files` to find the file and retrieve its `fileId` before invoking this tool.\n - Set `includeComments` to `true` when the user asks about comments, feedback, action items, open questions, or discussion threads on the file, or before replying to or resolving a comment.\n\nThe file content may be incomplete for very large files. The text representation will change over time, so don't make assumptions about the particular format of the text returned by this tool. If supported and specified, comment tags will be included in the content.\n\nSupported Mime Types:\n\n - `application/vnd.google-apps.document` (supports comments)\n - `application/vnd.google-apps.presentation` (supports comments)\n - `application/vnd.google-apps.spreadsheet` (supports comments)\n - `application/pdf` \n - `application/msword` \n - `application/vnd.openxmlformats-officedocument.wordprocessingml.document` \n - `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` \n - `application/vnd.openxmlformats-officedocument.presentationml.presentation` \n - `application/vnd.oasis.opendocument.spreadsheet` \n - `application/vnd.oasis.opendocument.presentation` \n - `application/x-vnd.oasis.opendocument.text` \n - `image/png` \n - `image/jpeg` \n - `image/jpg` \n - `text/*` \n - `video/*` (when a transcript is available)\n\nIf the file is not found, try using other tools like `search_files` to find the file the user is requesting using keywords.\n",
              "inputSchema": {
                "description": "Request to read file content with support for fetching comments.",
                "properties": {
                  "fileId": {
                    "description": "Required. The ID of the file to retrieve.",
                    "type": "string"
                  },
                  "includeComments": {
                    "description": "Whether to include comments in the response. Set to true when the user asks about comments, feedback, action items, open questions, or discussion threads on the file, or before replying to or resolving a comment. Comments will be inlined in the text content of the file with a mapping to the comment threads. Note: Comments are only supported for Google Docs, Slides, and Sheets.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "fileId"
                ],
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "CommentThread": {
                    "description": "A thread of comments on a file.",
                    "properties": {
                      "commentId": {
                        "description": "The id of the comment thread. This is the same id as the initial comment.",
                        "type": "string"
                      },
                      "headPost": {
                        "$ref": "#/$defs/Post",
                        "description": "The first post in the comment thread."
                      },
                      "replies": {
                        "description": "The replies to the first post in the comment thread.",
                        "items": {
                          "$ref": "#/$defs/Post"
                        },
                        "type": "array"
                      },
                      "status": {
                        "description": "The status of the comment thread.",
                        "enum": [
                          "STATUS_UNSPECIFIED",
                          "OPEN",
                          "RESOLVED"
                        ],
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "",
                          "",
                          ""
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "Post": {
                    "description": "A post on a comment thread.",
                    "properties": {
                      "authorName": {
                        "description": "The name of the author of the post.",
                        "type": "string"
                      },
                      "content": {
                        "description": "The content of the post.",
                        "type": "string"
                      },
                      "modifiedTime": {
                        "description": "The time that the post was last modified.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "postId": {
                        "description": "The id of the post.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "Response to read file content.",
                "properties": {
                  "commentThreads": {
                    "description": "Comment threads present on the file.",
                    "items": {
                      "$ref": "#/$defs/CommentThread"
                    },
                    "type": "array"
                  },
                  "commentsNotSupported": {
                    "description": "Whether returning comments is supported for this file. Only present if include_comments is true in the request and comments are not supported.",
                    "type": "boolean"
                  },
                  "fileContent": {
                    "description": "Drive file content returned in text format. May be empty if the file is not supported for text formatting. Can include comment references if include_comments is true in the request.",
                    "type": "string"
                  },
                  "sharedDriveId": {
                    "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                    "type": "string"
                  },
                  "textFormattingNotSupported": {
                    "description": "Whether text formatting is supported for this file. If true, file_content will be empty.",
                    "type": "boolean"
                  },
                  "title": {
                    "description": "The title of the file.",
                    "type": "string"
                  },
                  "viewUrl": {
                    "description": "The URL to view the file.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Read file content"
              }
            },
            {
              "name": "search_files",
              "description": "Search for Drive files using a structured query (syntax: `query_term operator values`). Only terms in this list are supported.\nCombine clauses with `and`, `or`, `not`, and parentheses. String values must be single-quoted; escape embedded quotes as `\\'`.\nContext window token management can be tuned via `snippetVerbosity` (default is `SnippetVerbosity.DETAILED`) or if only metadata is needed, use `excludeContentSnippets`.\n\nUse `title contains` instead of `title =` when searching by file or folder name, unless the user explicitly asks for an exact full-title match. Do NOT include document type terms (e.g., 'presentation', 'slides', 'deck', 'document', 'doc', 'spreadsheet', 'sheet', 'pdf', 'folder', 'project') inside `title` or `fullText` clauses. Separate title keywords from file type terms and map them to `mimeType` clauses in the query.\n\nQuery terms \u0026 operators:\n\n - `title` (ops: contains, =, !=) — file title\n - `fullText` (ops: contains) — title or body text\n - `mimeType` (ops: contains, =, !=) — MIME type\n - `modifiedTime`, `viewedByMeTime`, `createdTime` (ops: `\u003c=`, `\u003c`, `=`, `!=`, `\u003e`, `\u003e=`). Use RFC 3339 UTC, e.g., `2012-06-04T12:00:00-08:00`. Date types not comparable.\n - `parentId` (ops: `=`, `!=`). Use `'root'` for the user's \"My Drive\".\n - `owner` (ops: `=`, `!=`). Use `'me'` for the requesting user.\n - `readers`, `writers` (use `'me' in readers` or `'user@example.com' in writers`). \n - `creator` (ops: `=`, `!=`). `'me'` or an email — who created the file.\n - `sharedFrom` (ops: `=`, `!=`). An email — who shared the file with the user.\n - `sharedTo` (ops: `=`, `!=`). An email — who the user shared the file with.\n - `sharedWithMe`, `starred` (ops: `=`, `!=`). `true` or `false`.\n - `folderProperties` (use `'value' in folderProperties`): `'syncedComputer'` (synced computer), `'syncFolder'` (synced folder).\n - `followUp` (ops: `=`, `!=`): `'assignedcomments'` (aliases `'todos'`, `'actionitems'`), `'suggestions'`, `'any'` — files with open follow-ups for the user.\n - `trashed` (ops: `=`, `!=`). `true` or `false` (default `false`).\n\nOther operators: `and`, `or`, `not`, `in`.\n\nExamples:\n\n - `title contains 'hello' and title contains 'goodbye'`\n - `modifiedTime \u003e '2024-01-01T00:00:00Z' and (mimeType contains 'image/' or mimeType contains 'video/')`\n - `mimeType = 'application/vnd.google-apps.project'` (for Drive projects)\n - `parentId = '1234567'`\n - `fullText contains 'hello'`\n - `owner = 'test@example.org'`\n - `sharedWithMe = true`\n - `starred = true`\n - `owner = 'me'` (for files owned by the user)\n - `'colleague@example.org' in writers and sharedFrom = 'colleague@example.org'`\n - `'syncedComputer' in folderProperties`\n\nUse `next_page_token` to paginate. Duplicate results can occur across page boundaries. An empty response means no more results.\n",
              "inputSchema": {
                "description": "Request to search files.",
                "properties": {
                  "excludeContentSnippets": {
                    "description": "If `true`, the content snippet will be excluded from the response. Must not be set to `true` if `snippet_verbosity` is specified.",
                    "type": "boolean"
                  },
                  "orderBy": {
                    "description": "Optional. The sort order for the search results. Specifies a single sort clause with syntax ` [asc|desc]`. Supported fields: - `modifiedTime` (defaults to `desc`) - `viewedByMeTime` (defaults to `desc`) Examples: `modifiedTime desc`, `viewedByMeTime`. If omitted or empty, results are ordered by relevance descending. Unsupported fields or invalid directions return an error.",
                    "type": "string"
                  },
                  "pageSize": {
                    "description": "The maximum number of files to return in each page.",
                    "format": "int32",
                    "type": "integer"
                  },
                  "pageToken": {
                    "description": "The page token to use for pagination.",
                    "type": "string"
                  },
                  "query": {
                    "description": "The search query.",
                    "type": "string"
                  },
                  "snippetVerbosity": {
                    "description": "Optional. Set to specify how verbose the snippets should be. Defaults to `DETAILED` if not set. Must not be set if `exclude_content_snippets` is `true`.",
                    "enum": [
                      "UNSPECIFIED",
                      "BRIEF",
                      "MEDIUM",
                      "DETAILED",
                      "MAX_ALLOWED"
                    ],
                    "type": "string",
                    "x-google-enum-descriptions": [
                      "",
                      "Limits the returned snippet to about 1000 characters.",
                      "Limits the returned snippet to about 2500 characters.",
                      "Limits the returned snippet to about 5000 characters.",
                      "The verbosity is greatly increased, limited by the overall response size."
                    ]
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "DownloadRestriction": {
                    "description": "Restrictions applied to downloading, printing, and copying a file.",
                    "properties": {
                      "restrictedReader": {
                        "description": "Optional. Whether download, print, and copy are restricted for readers (viewers) and commenters.",
                        "type": "boolean"
                      },
                      "restrictedWriter": {
                        "description": "Optional. Whether download, print, and copy are restricted for writers (editors). If true, download, print, and copy are also restricted for readers and commenters.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "File": {
                    "description": "A file resource.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "type": "boolean"
                      },
                      "capabilities": {
                        "$ref": "#/$defs/FileCapabilities",
                        "description": "Output only. Capabilities of the file for the requester.",
                        "readOnly": true
                      },
                      "contentSnippet": {
                        "description": "Generated snippet about the content of the file.",
                        "type": "string"
                      },
                      "createdTime": {
                        "description": "The time that the file was created.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "description": {
                        "description": "The description of the file.",
                        "type": "string"
                      },
                      "downloadRestriction": {
                        "$ref": "#/$defs/DownloadRestriction",
                        "description": "Optional. Restrictions applied to downloading, printing, and copying the file."
                      },
                      "etag": {
                        "description": "Output only. An opaque version identifier for the file that changes whenever the file is modified.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "fileExtension": {
                        "description": "The original file extension of the file, this is only populated for files with content stored in Drive.",
                        "type": "string"
                      },
                      "fileSize": {
                        "description": "The size in bytes of the file.",
                        "format": "int64",
                        "type": "string"
                      },
                      "folderProperties": {
                        "$ref": "#/$defs/FolderProperties",
                        "description": "Populated only for folders with special properties."
                      },
                      "followUps": {
                        "description": "Output only. Open follow-ups on this file for the requesting user. Empty when the user has nothing to act on.",
                        "items": {
                          "$ref": "#/$defs/FollowUp"
                        },
                        "readOnly": true,
                        "type": "array"
                      },
                      "id": {
                        "description": "The id of the file that was fetched.",
                        "type": "string"
                      },
                      "inheritedPermissionsDisabled": {
                        "description": "Whether inherited permissions are disabled on this folder. This is always false for non-folder types.",
                        "type": "boolean"
                      },
                      "lastCommentedTime": {
                        "description": "Output only. The time at which the file was last commented on. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "format": "date-time",
                        "readOnly": true,
                        "type": "string"
                      },
                      "lastModifyingUserEmail": {
                        "description": "Output only. Email address of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "lastModifyingUserName": {
                        "description": "Output only. Display name of the user who last modified the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The mime type of the file.",
                        "type": "string"
                      },
                      "modifiedTime": {
                        "description": "The most recent time at which the file was modified.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "owner": {
                        "description": "The email address of the owner of the file.",
                        "type": "string"
                      },
                      "ownerName": {
                        "description": "Output only. Display name of the owner of the file. See `owner` for the email address. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "parentId": {
                        "description": "The (optional) id of the parent of the file.",
                        "type": "string"
                      },
                      "projectMetadata": {
                        "$ref": "#/$defs/ProjectMetadata",
                        "description": "Output only. Populated only for Drive Projects (mime_type = \"application/vnd.google-apps.project\") when project details are requested. Top-level File fields describe the project item itself.",
                        "readOnly": true
                      },
                      "readOnly": {
                        "description": "Whether the content of the file is read-only (locked).",
                        "type": "boolean"
                      },
                      "readOnlyReason": {
                        "description": "The reason why the file was put into a read-only (locked) state.",
                        "type": "string"
                      },
                      "resourceUri": {
                        "description": "The resource URI of the file.",
                        "type": "string"
                      },
                      "sharedDriveId": {
                        "description": "The ID of the shared drive the file resides in. Only populated for items in shared drives.",
                        "type": "string"
                      },
                      "sharedWithMeTime": {
                        "description": "The time that the file was shared with the requester.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "shortcutDetails": {
                        "$ref": "#/$defs/ShortcutDetails",
                        "description": "Populated only for shortcut files (mime_type = \"application/vnd.google-apps.shortcut\"). Top-level File fields describe the shortcut item itself."
                      },
                      "starred": {
                        "description": "Whether the file has been starred.",
                        "type": "boolean"
                      },
                      "title": {
                        "description": "The title of the file.",
                        "type": "string"
                      },
                      "trashed": {
                        "description": "Whether the file is in the trash.",
                        "type": "boolean"
                      },
                      "viewUrl": {
                        "description": "The URL to view the file.",
                        "type": "string"
                      },
                      "viewedByMeTime": {
                        "description": "The most recent time at which the file was viewed by requester.",
                        "format": "date-time",
                        "type": "string"
                      },
                      "visibility": {
                        "description": "Output only. Sharing visibility state of the file. Only populated by `GetFile` when `include_rich_metadata` is `true`.",
                        "enum": [
                          "VISIBILITY_UNSPECIFIED",
                          "PUBLIC",
                          "UNLISTED",
                          "PUBLIC_TO_DOMAIN",
                          "UNLISTED_TO_DOMAIN",
                          "PRIVATE"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Visibility is unspecified.",
                          "Anyone on the internet can find and access the item, including anonymous users.",
                          "Anyone with the link can access the item, including anonymous users.",
                          "Anyone in the owner's domain can access the item.",
                          "Anyone in the owner's domain who has the link can access the item.",
                          "The item is not shared with the link, to the domain, or to the public. Note that the item may still be shared with specific users or groups."
                        ]
                      },
                      "writersCanShare": {
                        "description": "Whether users with only writer permission can modify the file's permissions and share the file.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FileCapabilities": {
                    "description": "Capabilities of the file for the requester.",
                    "properties": {
                      "canAddChildren": {
                        "description": "Output only. Whether the requester can add children to this folder. This is always false for non-folder types.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canEdit": {
                        "description": "Output only. Whether the requester can edit this file.",
                        "readOnly": true,
                        "type": "boolean"
                      },
                      "canMoveItemWithinDrive": {
                        "description": "Output only. Whether the requester can move this item within its drive (My Drive or shared drive).",
                        "readOnly": true,
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FolderProperties": {
                    "description": "Properties specific to folders.",
                    "properties": {
                      "syncFolder": {
                        "description": "Whether the folder is a synced folder from a computer or device.",
                        "type": "boolean"
                      },
                      "syncedComputer": {
                        "description": "Whether the folder is the root folder representing a synced computer or device.",
                        "type": "boolean"
                      }
                    },
                    "type": "object"
                  },
                  "FollowUp": {
                    "description": "An open item on a file that needs the requesting user's attention (Drive \"Follow-up\"). Mirrors drive.ActionItem.",
                    "properties": {
                      "commentId": {
                        "description": "Output only. The id of the comment thread that needs attention. Matches CommentThread.comment_id.",
                        "readOnly": true,
                        "type": "string"
                      },
                      "type": {
                        "description": "Output only. The kind of follow-up.",
                        "enum": [
                          "TYPE_UNSPECIFIED",
                          "ASSIGNMENT",
                          "SUGGESTION"
                        ],
                        "readOnly": true,
                        "type": "string",
                        "x-google-enum-descriptions": [
                          "Unspecified type.",
                          "An open comment thread assigned to the requesting user.",
                          "An open suggested edit on a file the requesting user owns."
                        ]
                      }
                    },
                    "type": "object"
                  },
                  "ProjectMetadata": {
                    "description": "Metadata of a Drive Project container.",
                    "properties": {
                      "emoji": {
                        "description": "The project emoji.",
                        "type": "string"
                      },
                      "missionStatement": {
                        "deprecated": true,
                        "description": "Deprecated: use purpose.",
                        "type": "string"
                      },
                      "purpose": {
                        "description": "The project purpose.",
                        "type": "string"
                      },
                      "sources": {
                        "description": "Sources attached to the project.",
                        "items": {
                          "$ref": "#/$defs/Source"
                        },
                        "type": "array"
                      }
                    },
                    "type": "object"
                  },
                  "ShortcutDetails": {
                    "description": "Details about the target of a shortcut file.",
                    "properties": {
                      "targetFileId": {
                        "description": "The ID of the file or folder that this shortcut points to. The target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      },
                      "targetMimeType": {
                        "description": "The MIME type of the shortcut's target as recorded when the shortcut was created. It is not refreshed if the target later changes, and the target may no longer exist or be accessible to the requester.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "Source": {
                    "description": "A source attached to the project.",
                    "properties": {
                      "fileId": {
                        "description": "The Drive item ID, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "mimeType": {
                        "description": "The MIME type of the Drive item, set when source_type is DRIVE_ITEM_SOURCE.",
                        "type": "string"
                      },
                      "sourceId": {
                        "description": "Server-assigned identifier of the source within the project.",
                        "type": "string"
                      },
                      "sourceType": {
                        "description": "The type of source. `SOURCE_TYPE_UNSPECIFIED` if the type is unknown.",
                        "enum": [
                          "SOURCE_TYPE_UNSPECIFIED",
                          "DRIVE_ITEM_SOURCE",
                          "DRIVE_ITEM",
                          "URL_SOURCE",
                          "GMAIL_SOURCE",
                          "CHAT_SOURCE",
                          "CALENDAR_SOURCE"
                        ],
                        "type": "string",
                        "x-google-enum-deprecated": [
                          false,
                          false,
                          true,
                          false,
                          false,
                          false,
                          false
                        ],
                        "x-google-enum-descriptions": [
                          "Not specified. In requests, treated identically to `DRIVE_ITEM_SOURCE`. In responses, the source type is unknown.",
                          "A Drive file or folder, identified by its Drive item ID.",
                          "Deprecated: use `DRIVE_ITEM_SOURCE`.",
                          "A web URL. Not yet supported in requests.",
                          "A Gmail thread. Not yet supported in requests.",
                          "A Google Chat space or message. Not yet supported in requests.",
                          "A Google Calendar event. Not yet supported in requests."
                        ]
                      },
                      "title": {
                        "description": "Human-readable title of the source, if applicable.",
                        "type": "string"
                      }
                    },
                    "type": "object"
                  }
                },
                "description": "Response to search files.",
                "properties": {
                  "files": {
                    "description": "Output only. The list of files.",
                    "items": {
                      "$ref": "#/$defs/File"
                    },
                    "readOnly": true,
                    "type": "array"
                  },
                  "nextPageToken": {
                    "description": "The next page token.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": false,
                "readOnlyHint": true,
                "title": "Search files"
              }
            }
          ],
          "schemaTokens": 17816,
          "changedAt": "2026-11-07T01:45:16.132985924Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 17816,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 8
            },
            "findings": [
              {
                "rule": "TC07",
                "severity": "warn",
                "tool": "search_files",
                "message": "the description is about 703 tokens",
                "fix": "Keep the description to what a model needs to choose and call the tool; move the manual to a resource or the docs."
              },
              {
                "rule": "TC14",
                "severity": "warn",
                "tool": "create_file",
                "message": "allowed values are in the description, not an enum: pregeneratedId",
                "fix": "Move them into enum."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "copy_file",
                "message": "the definition is about 2,831 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "create_file",
                "message": "the definition is about 3,280 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "get_file_metadata",
                "message": "the definition is about 2,867 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "list_recent_files",
                "message": "the definition is about 2,989 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "search_files",
                "message": "the definition is about 3,653 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC23",
                "severity": "warn",
                "message": "8 tools, about 17,828 tokens of definitions",
                "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "1 of 8 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "github": {
          "repo": "googleapis/google-api-nodejs-client",
          "checkedAt": "2026-11-02T08:52:10.522231186Z",
          "stars": 12283,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-10-30T15:41:41Z",
          "openIssues": 209,
          "openPRs": 15,
          "issuesOpened90d": 0,
          "issuesClosed90d": 2,
          "prsMerged90d": 72,
          "ci": {
            "branch": "main",
            "runs": 50,
            "success": 50,
            "failure": 0,
            "other": 0,
            "latest": "success",
            "latestAt": "2026-10-30T15:43:54Z"
          },
          "replies": {
            "sampled": 25,
            "unanswered": 8,
            "medianDays": 8.2
          }
        },
        "updatedAt": "2026-11-07T18:20:27.627281058Z"
      }
    },
    "edges": [
      {
        "by": 10,
        "category": "reliability",
        "leads": "google-cloud-storage",
        "name": "Reliability",
        "reasons": {
          "a": "Google Cloud's status dashboard with a per-product incident feed (20). In the 90 days from 8 August, Cloud Storage appears in a high-severity incident on 20 August across 27 products (about 3 hours 40 minutes of timeouts and errors), a medium incident on 8 to 9 October with elevated upload and write errors, and a medium regional incident in europe-west2 on 20 October. One major outage (10). The request-rate guide gives numbers, no ramp-up needed below 1,000 writes or 5,000 reads a second per bucket, with gradual ramping above (15). The retry strategy page lists retryable responses, idempotent operations and preconditions that make writes safe to retry, and the client libraries back off exponentially (15). SLA with monthly uptime of 99.95 per cent for multi-region Standard and 99.9 per cent regional (10). Generally available, and the MCP server since 20 April 2026 (10). 20 + 10 + 15 + 15 + 10 + 10 = 80.",
          "b": "Google Workspace Status Dashboard with an incidents JSON going back to 5 November 2025, re-read on 1 November (20). In the 90 days from 3 August the feed has two Drive service disruptions and nothing posted after 25 September. From 18 August 16:58 to 19 August 05:40 PDT, 12 hours 42 minutes, Drive users in Australia, the Philippines and New Zealand had severe latency, loading failures and 502 errors after a traffic attribution misconfiguration in Google's regional load balancing, and the report says customers outside those regions were largely unaffected. On 16 September a capacity test dropped a subset of Drive traffic for 39 minutes (07:03 to 07:43 PDT in the final report). The first hit every Drive user in one region with wide errors for over an hour, so it stays one regional major, as the 17 October check read it and as the 4 October S3 check and temporal's 10 September incident were read. Single-region incidents that hit only some customers, such as Twilio's Australia 503s and Backblaze's EU upload failures, were read as partial on 1 November (10). The dashboard tracks the Drive product, not the API alone. Quotas published in units, 1,000,000 a minute a project and 325,000 a minute a user, with 400,000,000 units and 1 TB of egress a day a project before charges apply, on the limits page re-read on 1 November (15). The error guide and the limits page say to retry 429, 5xx and some 403s with truncated exponential backoff, and resumable uploads can pick up after a failure (15). The Workspace SLA (last modified 31 August 2026, re-read on 1 November) covers Google Drive at 99.9 per cent but doesn't name the API, and it measures Downtime as a user error rate above 5 per cent in the user web interface (5). The API is GA, the MCP server Developer Preview (5). 20+10+15+15+5+5 = 70."
        },
        "scores": {
          "a": 80,
          "b": 70
        }
      },
      {
        "by": 10,
        "category": "transparency",
        "leads": "google-cloud-storage",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Closed service under the Google Cloud terms; client libraries are Apache-2.0 (18). Google's privacy policy, the Cloud Data Processing Addendum and a sub-processor list last modified 19 October 2026 apply, per the Secret Manager listing's 1 November check (22). Dated notices in release notes and a deprecated read_text MCP tool that names its replacement; Google Cloud's deprecation policy wasn't re-read today (15). Sub-processors are listed with locations, and each bucket is created in a chosen location (18). 18 + 22 + 15 + 18 = 73.",
          "b": "Closed service under the Google APIs Terms (last modified 9 November 2021, re-read on 1 November); client libraries Apache-2.0 (18). The Google privacy policy, effective 16 October 2026, covers end users. Workspace customers are covered by the Cloud Data Processing Addendum (last modified 30 October 2026 when read on 1 November), which still commits Google to delete customer data within a maximum period of 180 days. We found no retention statement specific to Drive API data (18). Dated deprecations and notices in the release notes, enforceExpansiveAccess on 25 February 2026 and the 12 October 2026 notice that Workspace MCP servers reject OAuth clients not marked as agentic from 11 November, but no stated deprecation notice period, and the API terms let Google discontinue an API at any time (14). The Workspace subprocessor list, last modified 19 October 2026 when read on 1 November, gives the activity and processing countries of each third party (14 in its core table) and of Google's affiliates for all Workspace Core Services, and data regions exist for some plans; the list covers Workspace customers, not personal accounts, which we read the same way as for Calendar (20)."
        },
        "scores": {
          "a": 85,
          "b": 75
        }
      },
      {
        "by": 8,
        "category": "schema",
        "leads": "google-drive-api",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "The JSON API is described by a public Google API Discovery document, storage v1 revision 20261103 (25). docs.cloud.google.com/llms.txt and /storage/llms.txt return 404 (0). The reference explains each method and the docs say when to use XML, JSON or gRPC and that gsutil is legacy (14). Typed resources with enums for storage classes and predefined ACLs (14). Samples in every client library and an error reference with HTTP codes and reasons (13). API version v1 and dated release notes, the latest on 4 November 2026 (15). 25 + 0 + 14 + 14 + 13 + 15 = 81.",
          "b": "The Drive v3 discovery document is public and machine-readable, at revision 20261028 with 64 methods on 1 November (25). No llms.txt at developers.google.com, /workspace or /workspace/drive (404 on 1 November), but doc pages return Markdown when `.md.txt` is appended to the URL, which we found no index or link advertising, read as for Sheets and Forms (5 of 10). Method references say what each call does, and the scope guide says when drive.file is enough. The MCP tool descriptions read from tools/list on 1 November name the tool to use instead (`read_file_content` over `download_file_content` for text), say to call `search_files` first and never to guess a file ID, and list query terms not to use, read as for Gmail (16). Typed parameters with enums for roles, permission types, corpora and spaces (13). 40-odd error reasons documented in one JSON shape, with code samples across the guides (15). Versioned (v3) with dated Workspace release notes (15). 25+5+16+13+15+15 = 89."
        },
        "scores": {
          "a": 81,
          "b": 89
        }
      },
      {
        "by": 5,
        "category": "payments",
        "leads": "google-drive-api",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No x402, MPP or L402 (0). Per-operation and per-GB prices public without login, though the regional storage table draws by script (20). Always Free covers 5 GB-months and small operation counts in three US regions, but a Google Cloud billing account is needed; whether a card is required wasn't confirmed today (10). A person creates the project and billing account in a browser (0). 0 + 20 + 10 + 0 = 30.",
          "b": "No x402, MPP or L402 (0). API calls are free within published quotas, and the limits page publishes the unit cost of each kind of call, but the overage charges planned for later in 2026 have no prices yet on 1 November; Google promises at least 90 days' notice before billing changes take effect (15). A free Google account can call the API, and nothing is billed within quota today (20). A person has to pass an OAuth consent screen, and the MCP server needs Developer Preview enrolment (0)."
        },
        "scores": {
          "a": 30,
          "b": 35
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google Cloud",
        "b": "Google",
        "name": "Vendor"
      },
      {
        "a": "https://storage.googleapis.com/storage/mcp",
        "b": "https://www.googleapis.com/drive/v3",
        "name": "Hosted endpoint"
      },
      {
        "a": "Streamable HTTP",
        "b": "HTTP, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "none",
        "b": "Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "9",
        "b": "8",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-11-04",
        "b": "2026-10-19",
        "name": "Last release"
      },
      {
        "a": "2026-09-02",
        "b": "2021-11-09",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "2026-10-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "12k stars, 1.3M npm/wk, 29.8M PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.4/5 (8)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Google Cloud Storage scores 76.7 (BB) on agent readiness against Google Drive API + MCP's 75.5 (BB), and leads in 4 of 7 scored categories. Google Drive API + MCP leads on schema \u0026 documentation and payments \u0026 pricing.",
        "question": "Which is better for AI agents, Google Cloud Storage or Google Drive API + MCP?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Google Cloud Storage and Google Drive API + MCP need an API key?"
      },
      {
        "answer": "Yes. Google Cloud Storage has a hosted endpoint at https://storage.googleapis.com/storage/mcp and Google Drive API + MCP at https://www.googleapis.com/drive/v3.",
        "question": "Can an agent call Google Cloud Storage and Google Drive API + MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 80 against 70",
          "Transparency \u0026 trust, 85 against 75"
        ],
        "also": null,
        "goodFor": "Agents on Google Cloud that store and share files and datasets. amazon-s3, azure-blob-storage and cloudflare-r2 are the closest listings; teams outside Google Cloud with S3 tooling may prefer S3-compatible stores.",
        "slug": "google-cloud-storage",
        "watchFor": "MCP tools carry no read-only or destructive annotations and deletes need no confirmation"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 89 against 81",
          "Payments \u0026 pricing, 35 against 30"
        ],
        "also": null,
        "goodFor": "Agents working on files that people already keep in Drive, inside a Workspace organisation with admin controls.",
        "slug": "google-drive-api",
        "watchFor": "OAuth consent, scope verification and a Cloud project before an agent can list a folder"
      }
    ],
    "history": {
      "google-cloud-storage": null,
      "google-drive-api": [
        {
          "causes": [
            "evidence",
            "correction"
          ],
          "date": "2026-10-17",
          "delta": -4.1,
          "from": 79.6,
          "fromGrade": "A",
          "to": 75.5,
          "toGrade": "BB"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.3,
          "from": 79.9,
          "fromGrade": "A",
          "to": 79.6,
          "toGrade": "A"
        },
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-05",
          "delta": 1.3,
          "from": 78.6,
          "fromGrade": "A",
          "to": 79.9,
          "toGrade": "A"
        }
      ]
    },
    "job": {
      "capability": "storage.share",
      "name": "File sharing"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-s3-vs-google-drive-api.json",
        "title": "Amazon S3 vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/amazon-s3-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-drive-api.json",
        "title": "Azure Blob Storage vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/backblaze-b2-vs-google-drive-api.json",
        "title": "Backblaze B2 vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/backblaze-b2-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/box-api-vs-google-cloud-storage.json",
        "title": "Box API + MCP vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/box-api-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api.json",
        "title": "Cloudflare R2 vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-drive-api.json",
        "title": "DigitalOcean Spaces vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dropbox-api-vs-google-cloud-storage.json",
        "title": "Dropbox API + MCP vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/dropbox-api-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fast-io-vs-google-cloud-storage.json",
        "title": "Fastio vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/fast-io-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-onlyoffice-mcp.json",
        "title": "Google Cloud Storage vs ONLYOFFICE Apps MCP Server",
        "url": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-onlyoffice-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-drive-api-vs-tigris.json",
        "title": "Google Drive API + MCP vs Tigris",
        "url": "https://www.anchorterminal.com/compare/google-drive-api-vs-tigris"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-s3-vs-google-cloud-storage.json",
        "title": "Amazon S3 vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/amazon-s3-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-cloud-storage.json",
        "title": "Azure Blob Storage vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/backblaze-b2-vs-google-cloud-storage.json",
        "title": "Backblaze B2 vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/backblaze-b2-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bunny-storage-vs-google-cloud-storage.json",
        "title": "Bunny Storage vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/bunny-storage-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-cloud-storage.json",
        "title": "Cloudflare R2 vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-cloud-storage.json",
        "title": "DigitalOcean Spaces vs Google Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-tigris.json",
        "title": "Google Cloud Storage vs Tigris",
        "url": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-tigris"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-wasabi-hot-cloud-storage.json",
        "title": "Google Cloud Storage vs Wasabi Hot Cloud Storage",
        "url": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-wasabi-hot-cloud-storage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/box-api-vs-google-drive-api.json",
        "title": "Box API + MCP vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/box-api-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dropbox-api-vs-google-drive-api.json",
        "title": "Dropbox API + MCP vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/dropbox-api-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fast-io-vs-google-drive-api.json",
        "title": "Fastio vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/fast-io-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint.json",
        "title": "Google Drive API + MCP vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-drive-api-vs-onlyoffice-mcp.json",
        "title": "Google Drive API + MCP vs ONLYOFFICE Apps MCP Server",
        "url": "https://www.anchorterminal.com/compare/google-drive-api-vs-onlyoffice-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-onedrive-sharepoint.json",
        "title": "Google Cloud Storage vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-onedrive-sharepoint"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 10,
        "edge": "google-cloud-storage",
        "google-cloud-storage": 80,
        "google-drive-api": 70,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "edge": "google-drive-api",
        "google-cloud-storage": 81,
        "google-drive-api": 89,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 2,
        "edge": "google-drive-api",
        "google-cloud-storage": 85,
        "google-drive-api": 87,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 2,
        "edge": "google-cloud-storage",
        "google-cloud-storage": 85,
        "google-drive-api": 83,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 5,
        "edge": "google-drive-api",
        "google-cloud-storage": 30,
        "google-drive-api": 35,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 3,
        "edge": "google-cloud-storage",
        "google-cloud-storage": 88,
        "google-drive-api": 85,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 10,
        "edge": "google-cloud-storage",
        "google-cloud-storage": 85,
        "google-drive-api": 75,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Google Cloud Storage scores 76.7 (BB) on agent readiness against Google Drive API + MCP's 75.5 (BB), and leads in 4 of 7 scored categories. Google Drive API + MCP leads on schema \u0026 documentation and payments \u0026 pricing. Both do file sharing.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "google-cloud-storage": "IAM per bucket and MCP method, signed URLs, preconditions for safe retries and a 99.95 per cent multi-region SLA make it a well-governed object store for agents. The nine-tool MCP server has no read-only or destructive annotations, reads stop at 8 MiB, and a person must set up a project and billing first.",
      "google-drive-api": "No charge for API calls within quota, counted in quota units per minute per project and per user. OAuth consent, scope verification and a Cloud project before an agent can list a folder."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api",
    "json": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api.min.md"
  },
  "markdown": "Google Cloud Storage scores 76.7 (BB) on agent readiness against Google Drive API + MCP's 75.5 (BB), and leads in 4 of 7 scored categories. Google Drive API + MCP leads on schema \u0026 documentation and payments \u0026 pricing. Both do file sharing.\n\n- Google Cloud Storage: grade BB, 76.7/100, rank #41 of 1486. Markdown https://www.anchorterminal.com/tools/google-cloud-storage.md · JSON https://www.anchorterminal.com/api/v1/tools/google-cloud-storage.json\n- Google Drive API + MCP: grade BB, 75.5/100, rank #59 of 1486. Markdown https://www.anchorterminal.com/tools/google-drive-api.md · JSON https://www.anchorterminal.com/api/v1/tools/google-drive-api.json\n- Best file storage and sharing APIs for AI agents: https://www.anchorterminal.com/best/file-storage/index.md\n- All 104 storage comparisons: https://www.anchorterminal.com/compare/file-storage/index.md\n\n## Which one, for what\n\n### Google Cloud Storage (BB)\n\nGood for: Agents on Google Cloud that store and share files and datasets. amazon-s3, azure-blob-storage and cloudflare-r2 are the closest listings; teams outside Google Cloud with S3 tooling may prefer S3-compatible stores.\n\nAhead on:\n- Reliability, 80 against 70\n- Transparency \u0026 trust, 85 against 75\n\nWatch for: MCP tools carry no read-only or destructive annotations and deletes need no confirmation\n\n### Google Drive API + MCP (BB)\n\nGood for: Agents working on files that people already keep in Drive, inside a Workspace organisation with admin controls.\n\nAhead on:\n- Schema \u0026 documentation, 89 against 81\n- Payments \u0026 pricing, 35 against 30\n\nWatch for: OAuth consent, scope verification and a Cloud project before an agent can list a folder\n\n\n## Why the edge\n\n### Reliability: Google Cloud Storage +10\n\n- Google Cloud Storage (80): Google Cloud's status dashboard with a per-product incident feed (20). In the 90 days from 8 August, Cloud Storage appears in a high-severity incident on 20 August across 27 products (about 3 hours 40 minutes of timeouts and errors), a medium incident on 8 to 9 October with elevated upload and write errors, and a medium regional incident in europe-west2 on 20 October. One major outage (10). The request-rate guide gives numbers, no ramp-up needed below 1,000 writes or 5,000 reads a second per bucket, with gradual ramping above (15). The retry strategy page lists retryable responses, idempotent operations and preconditions that make writes safe to retry, and the client libraries back off exponentially (15). SLA with monthly uptime of 99.95 per cent for multi-region Standard and 99.9 per cent regional (10). Generally available, and the MCP server since 20 April 2026 (10). 20 + 10 + 15 + 15 + 10 + 10 = 80.\n- Google Drive API + MCP (70): Google Workspace Status Dashboard with an incidents JSON going back to 5 November 2025, re-read on 1 November (20). In the 90 days from 3 August the feed has two Drive service disruptions and nothing posted after 25 September. From 18 August 16:58 to 19 August 05:40 PDT, 12 hours 42 minutes, Drive users in Australia, the Philippines and New Zealand had severe latency, loading failures and 502 errors after a traffic attribution misconfiguration in Google's regional load balancing, and the report says customers outside those regions were largely unaffected. On 16 September a capacity test dropped a subset of Drive traffic for 39 minutes (07:03 to 07:43 PDT in the final report). The first hit every Drive user in one region with wide errors for over an hour, so it stays one regional major, as the 17 October check read it and as the 4 October S3 check and temporal's 10 September incident were read. Single-region incidents that hit only some customers, such as Twilio's Australia 503s and Backblaze's EU upload failures, were read as partial on 1 November (10). The dashboard tracks the Drive product, not the API alone. Quotas published in units, 1,000,000 a minute a project and 325,000 a minute a user, with 400,000,000 units and 1 TB of egress a day a project before charges apply, on the limits page re-read on 1 November (15). The error guide and the limits page say to retry 429, 5xx and some 403s with truncated exponential backoff, and resumable uploads can pick up after a failure (15). The Workspace SLA (last modified 31 August 2026, re-read on 1 November) covers Google Drive at 99.9 per cent but doesn't name the API, and it measures Downtime as a user error rate above 5 per cent in the user web interface (5). The API is GA, the MCP server Developer Preview (5). 20+10+15+15+5+5 = 70.\n\n### Transparency \u0026 trust: Google Cloud Storage +10\n\n- Google Cloud Storage (85): Closed service under the Google Cloud terms; client libraries are Apache-2.0 (18). Google's privacy policy, the Cloud Data Processing Addendum and a sub-processor list last modified 19 October 2026 apply, per the Secret Manager listing's 1 November check (22). Dated notices in release notes and a deprecated read_text MCP tool that names its replacement; Google Cloud's deprecation policy wasn't re-read today (15). Sub-processors are listed with locations, and each bucket is created in a chosen location (18). 18 + 22 + 15 + 18 = 73.\n- Google Drive API + MCP (75): Closed service under the Google APIs Terms (last modified 9 November 2021, re-read on 1 November); client libraries Apache-2.0 (18). The Google privacy policy, effective 16 October 2026, covers end users. Workspace customers are covered by the Cloud Data Processing Addendum (last modified 30 October 2026 when read on 1 November), which still commits Google to delete customer data within a maximum period of 180 days. We found no retention statement specific to Drive API data (18). Dated deprecations and notices in the release notes, enforceExpansiveAccess on 25 February 2026 and the 12 October 2026 notice that Workspace MCP servers reject OAuth clients not marked as agentic from 11 November, but no stated deprecation notice period, and the API terms let Google discontinue an API at any time (14). The Workspace subprocessor list, last modified 19 October 2026 when read on 1 November, gives the activity and processing countries of each third party (14 in its core table) and of Google's affiliates for all Workspace Core Services, and data regions exist for some plans; the list covers Workspace customers, not personal accounts, which we read the same way as for Calendar (20).\n\n### Schema \u0026 documentation: Google Drive API + MCP +8\n\n- Google Cloud Storage (81): The JSON API is described by a public Google API Discovery document, storage v1 revision 20261103 (25). docs.cloud.google.com/llms.txt and /storage/llms.txt return 404 (0). The reference explains each method and the docs say when to use XML, JSON or gRPC and that gsutil is legacy (14). Typed resources with enums for storage classes and predefined ACLs (14). Samples in every client library and an error reference with HTTP codes and reasons (13). API version v1 and dated release notes, the latest on 4 November 2026 (15). 25 + 0 + 14 + 14 + 13 + 15 = 81.\n- Google Drive API + MCP (89): The Drive v3 discovery document is public and machine-readable, at revision 20261028 with 64 methods on 1 November (25). No llms.txt at developers.google.com, /workspace or /workspace/drive (404 on 1 November), but doc pages return Markdown when `.md.txt` is appended to the URL, which we found no index or link advertising, read as for Sheets and Forms (5 of 10). Method references say what each call does, and the scope guide says when drive.file is enough. The MCP tool descriptions read from tools/list on 1 November name the tool to use instead (`read_file_content` over `download_file_content` for text), say to call `search_files` first and never to guess a file ID, and list query terms not to use, read as for Gmail (16). Typed parameters with enums for roles, permission types, corpora and spaces (13). 40-odd error reasons documented in one JSON shape, with code samples across the guides (15). Versioned (v3) with dated Workspace release notes (15). 25+5+16+13+15+15 = 89.\n\n### Payments \u0026 pricing: Google Drive API + MCP +5\n\n- Google Cloud Storage (30): No x402, MPP or L402 (0). Per-operation and per-GB prices public without login, though the regional storage table draws by script (20). Always Free covers 5 GB-months and small operation counts in three US regions, but a Google Cloud billing account is needed; whether a card is required wasn't confirmed today (10). A person creates the project and billing account in a browser (0). 0 + 20 + 10 + 0 = 30.\n- Google Drive API + MCP (35): No x402, MPP or L402 (0). API calls are free within published quotas, and the limits page publishes the unit cost of each kind of call, but the overage charges planned for later in 2026 have no prices yet on 1 November; Google promises at least 90 days' notice before billing changes take effect (15). A free Google account can call the API, and nothing is billed within quota today (20). A person has to pass an OAuth consent screen, and the MCP server needs Developer Preview enrolment (0).\n\n## Score by category\n\n| Category | Weight | Google Cloud Storage | Google Drive API + MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 80 | 70 | Google Cloud Storage +10 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 81 | 89 | Google Drive API + MCP +8 |\n| Agent ergonomics | 13% (16.2 this run) | 85 | 87 | Google Drive API + MCP +2 |\n| Security \u0026 auth | 14% (17.5 this run) | 85 | 83 | Google Cloud Storage +2 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 35 | Google Drive API + MCP +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 88 | 85 | Google Cloud Storage +3 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 85 | 75 | Google Cloud Storage +10 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **76.7 · BB** | **75.5 · BB** | |\n\n## Facts side by side\n\n| Fact | Google Cloud Storage | Google Drive API + MCP |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google Cloud | Google |\n| Hosted endpoint | `https://storage.googleapis.com/storage/mcp` | `https://www.googleapis.com/drive/v3` |\n| Transports | Streamable HTTP | HTTP, Streamable HTTP |\n| Auth | OAuth | OAuth |\n| Pricing | Pay per use | Free |\n| x402 | no | no |\n| Licence | none | Apache-2.0 |\n| Tools exposed | 9 | 8 |\n| Read-only variant documented | no | yes |\n| llms.txt | no | no |\n| Last release | 2026-11-04 | 2026-10-19 |\n| Terms last updated | 2026-09-02 | 2021-11-09 |\n| Privacy policy last updated | 2026-10-01 | 2026-10-01 |\n| Customer content may train models | yes | yes |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | none | 12k stars, 1.3M npm/wk, 29.8M PyPI/wk |\n| Agent reviews | none | 3.4/5 (8) |\n\n## How the scores have moved\n\n### Google Cloud Storage\n\nNo score change since it was listed.\n\n### Google Drive API + MCP\n\n- -4.1 on 17 October 2026 (A to BB): new evidence, correction\n- -0.3 on 8 October 2026: checklist\n- +1.3 on 5 October 2026: new evidence\n\n## Verdicts\n\n**Google Cloud Storage.** IAM per bucket and MCP method, signed URLs, preconditions for safe retries and a 99.95 per cent multi-region SLA make it a well-governed object store for agents. The nine-tool MCP server has no read-only or destructive annotations, reads stop at 8 MiB, and a person must set up a project and billing first.\n\n**Google Drive API + MCP.** No charge for API calls within quota, counted in quota units per minute per project and per user. OAuth consent, scope verification and a Cloud project before an agent can list a folder.\n\n## Before you call either\n\n### Google Cloud Storage\n\n1. Grant the agent's service account only Storage Object Viewer or Creator on the bucket it needs\n2. Send ifGenerationMatch on writes and deletes so a retry can't overwrite a newer object\n3. Use a V4 signed URL to share an object rather than changing bucket access\n4. Read objects over 8 MiB through the JSON API with Range, not the MCP read_object tool\n5. Confirm with the user before delete_bucket or delete_object\n\n### Google Drive API + MCP\n\n1. Ask for drive.file rather than drive; it needs no verification and covers files the app created or the user picked\n2. Use uploadType=resumable for anything over 5 MB and send chunks in multiples of 256 KB, and pass fields= on files.list and files.get to cut responses\n3. For a link that expires, share to a user or group with expirationTime; a type=anyone permission can't expire, so delete it yourself\n4. Mark the OAuth client \"Use this client for an AI-powered agent\" before 12 November 2026, since Workspace MCP servers reject unmarked clients from 11 November\n5. Back off exponentially on 429 rateLimitExceeded and 403 userRateLimitExceeded; 403 storageQuotaExceeded won't clear by retrying\n\n## Questions\n\n### Which is better for AI agents, Google Cloud Storage or Google Drive API + MCP?\n\nGoogle Cloud Storage scores 76.7 (BB) on agent readiness against Google Drive API + MCP's 75.5 (BB), and leads in 4 of 7 scored categories. Google Drive API + MCP leads on schema \u0026 documentation and payments \u0026 pricing.\n\n### Do Google Cloud Storage and Google Drive API + MCP need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Google Cloud Storage and Google Drive API + MCP without installing anything?\n\nYes. Google Cloud Storage has a hosted endpoint at https://storage.googleapis.com/storage/mcp and Google Drive API + MCP at https://www.googleapis.com/drive/v3.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api.json, and with the fewest tokens: https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"google-cloud-storage\", \"b\": \"google-drive-api\"}`. From a terminal: `anchor compare google-cloud-storage google-drive-api`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/google-cloud-storage.json and https://www.anchorterminal.com/api/v1/tools/google-drive-api.json\n\n## Other comparisons with Google Cloud Storage or Google Drive API + MCP\n\n- [Amazon S3 vs Google Drive API + MCP](https://www.anchorterminal.com/compare/amazon-s3-vs-google-drive-api.md)\n- [Azure Blob Storage vs Google Drive API + MCP](https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-drive-api.md)\n- [Backblaze B2 vs Google Drive API + MCP](https://www.anchorterminal.com/compare/backblaze-b2-vs-google-drive-api.md)\n- [Box API + MCP vs Google Cloud Storage](https://www.anchorterminal.com/compare/box-api-vs-google-cloud-storage.md)\n- [Cloudflare R2 vs Google Drive API + MCP](https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api.md)\n- [DigitalOcean Spaces vs Google Drive API + MCP](https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-drive-api.md)\n- [Dropbox API + MCP vs Google Cloud Storage](https://www.anchorterminal.com/compare/dropbox-api-vs-google-cloud-storage.md)\n- [Fastio vs Google Cloud Storage](https://www.anchorterminal.com/compare/fast-io-vs-google-cloud-storage.md)\n- [Google Cloud Storage vs ONLYOFFICE Apps MCP Server](https://www.anchorterminal.com/compare/google-cloud-storage-vs-onlyoffice-mcp.md)\n- [Google Drive API + MCP vs Tigris](https://www.anchorterminal.com/compare/google-drive-api-vs-tigris.md)\n- [Amazon S3 vs Google Cloud Storage](https://www.anchorterminal.com/compare/amazon-s3-vs-google-cloud-storage.md)\n- [Azure Blob Storage vs Google Cloud Storage](https://www.anchorterminal.com/compare/azure-blob-storage-vs-google-cloud-storage.md)\n- [Backblaze B2 vs Google Cloud Storage](https://www.anchorterminal.com/compare/backblaze-b2-vs-google-cloud-storage.md)\n- [Bunny Storage vs Google Cloud Storage](https://www.anchorterminal.com/compare/bunny-storage-vs-google-cloud-storage.md)\n- [Cloudflare R2 vs Google Cloud Storage](https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-cloud-storage.md)\n- [DigitalOcean Spaces vs Google Cloud Storage](https://www.anchorterminal.com/compare/digitalocean-spaces-vs-google-cloud-storage.md)\n- [Google Cloud Storage vs Tigris](https://www.anchorterminal.com/compare/google-cloud-storage-vs-tigris.md)\n- [Google Cloud Storage vs Wasabi Hot Cloud Storage](https://www.anchorterminal.com/compare/google-cloud-storage-vs-wasabi-hot-cloud-storage.md)\n- [Box API + MCP vs Google Drive API + MCP](https://www.anchorterminal.com/compare/box-api-vs-google-drive-api.md)\n- [Dropbox API + MCP vs Google Drive API + MCP](https://www.anchorterminal.com/compare/dropbox-api-vs-google-drive-api.md)\n- [Fastio vs Google Drive API + MCP](https://www.anchorterminal.com/compare/fast-io-vs-google-drive-api.md)\n- [Google Drive API + MCP vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint.md)\n- [Google Drive API + MCP vs ONLYOFFICE Apps MCP Server](https://www.anchorterminal.com/compare/google-drive-api-vs-onlyoffice-mcp.md)\n- [Google Cloud Storage vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/google-cloud-storage-vs-onedrive-sharepoint.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Google Cloud Storage vs Google Drive API + MCP",
        "url": ""
      }
    ],
    "description": "Google Cloud Storage scores 76.7 (BB) to Google Drive's 75.5 (BB) for file sharing. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Google Cloud Storage BB 76.7",
      "Google Drive API + MCP BB 75.5",
      "scores"
    ],
    "h1": "Google Cloud Storage vs Google Drive API + MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/google-cloud-storage-vs-google-drive-api",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Google Cloud Storage vs Google Drive for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/google-cloud-storage-vs-google-drive-api"
  },
  "tokens": {
    "markdown": 4550,
    "slim": 2480
  },
  "version": 1
}
