drivelift
This MCP server lets you set up Google Drive access with your own OAuth client and upload local files to Drive, optionally converting them to Google Sheets/Docs/Slides.
Check whether drivelift is ready to upload and get exact Google Cloud Console setup steps and links (
status).Import a downloaded OAuth client JSON without passing secrets through the conversation (
import_client_secret).Start and monitor Google sign-in via a loopback browser flow (
auth_start,auth_status).Use gcloud to create/select a Google Cloud project and enable the Drive API (
gcloud_setup).Upload a local file to Google Drive and get its URL; set Drive name, destination folder ID, and conversion mode (
auto,none,spreadsheet,document,presentation) (upload).
Uploads local files to Google Drive and converts them into Google Sheets, Docs, or Slides, providing tools for authentication, status checking, and file uploads.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@driveliftUpload ./report.xlsx to Google Drive as a Google Sheet."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
drivelift
ローカルのファイルを Google Drive へ持ち上げ、Google スプレッドシート/ドキュメント/スライドとして置く MCP サーバー兼 CLI。LLM エージェント(Claude Code、Cursor、Codex など)が作った xlsx や md を、書式を保ったまま Drive の URL にする。
何を解くか
エージェントが手元に書いた成果物を Drive に載せたい場面で、既存の Drive コネクタはローカルファイルを受け取れない。中身を base64 にして会話に通すと、数十 KB のバイナリでも壊れる。
drivelift は利用者のマシンで動き、ツールにファイルパスを渡すだけで済む。バイト列は会話を通らず、Drive API へ直接流れる。xlsx から Google スプレッドシートへの変換は Drive 自身のインポート機能で行うので、列幅・塗り・タブ・埋め込み画像のような書式はその機能が保つ範囲でそのまま残る(rclone の --drive-import-formats と同じ経路)。
Related MCP server: google-drive-mcp-server
設計上の約束
共有の OAuth クライアントを持たない。 利用者が自分の Google Cloud プロジェクトでクライアントを作る(5 分程度)。未設定のときはツールが Console の URL を順に返して誘導する
スコープは
drive.fileだけ。 drivelift が作ったファイル以外は見えない。既存の共有資料を壊す経路がないsecret を会話に通さない。 クライアント JSON の取り込みはファイルパス指定のみ
ホスティング不要。 ループバック(127.0.0.1)でログインし、トークンは手元に置く
依存は MCP SDK と zod の 2 つ。Drive API は標準の
fetchで叩く
導入
Claude Code の場合、プロジェクトの .mcp.json に追加する。
{
"mcpServers": {
"drivelift": {
"command": "npx",
"args": ["-y", "drivelift@0"]
}
}
}または claude mcp add drivelift -- npx -y drivelift@0。CLI として使うなら npx drivelift doctor。
Node.js 22.13 以降が必要。
初回セットアップ
エージェントに「drivelift の status を見て」と言えば、以下を返してくる。手順を自分で踏む場合は同じ内容。
Google Cloud プロジェクトを作る(既存でも可): https://console.cloud.google.com/projectcreate 。gcloud が入っていれば
gcloud_setupツールが手順 1・2 を代理実行する。ツールは打つコマンドを先に見せ、承認を得てから実行する。CLI ではdrivelift setup-gcloudで計画を表示し、--yesを付けると実行する。手順 3・4 に gcloud の代替はないGoogle Drive API を有効化: https://console.cloud.google.com/apis/library/drive.googleapis.com
OAuth 同意画面を設定: https://console.cloud.google.com/auth/overview
Google Workspace のアカウントなら 内部(審査不要。テスト状態の7日失効も起きない)
個人 Gmail なら 外部 にして 本番に公開する。テスト状態のままだとリフレッシュトークンが 7 日で失効する
OAuth クライアントを デスクトップ アプリ 種別で作り、JSON をダウンロード: https://console.cloud.google.com/auth/clients/create
JSON を所定の場所に置く。
statusが~/Downloadsの候補を見つけるとmv … && chmod 600 …のコマンドをそのまま返すので、それを実行すればよい。import_client_secretツール(CLI:drivelift import-secret <path>)でも同じことができる。パスを省くと候補を列挙するだけで、コピーはしないauth_startツール(CLI:drivelift login)でブラウザが開くのでログインする。ツールは同意が終わるまで待つので、終わったことを伝え直す必要はない
以後は upload を呼ぶだけ。設定が欠けた状態で upload を呼んでも、同じ手順が next_steps として返る。
ツール
ツール | 役割 |
| 導入状態( |
| ログイン開始。ブラウザを開き、同意が終わるまで最大 |
| ログインの進捗( |
| ダウンロード済みのクライアント JSON を設定ディレクトリへ取り込む |
| gcloud が入っていれば手順 1・2(プロジェクト用意と Drive API 有効化)を代理実行。 |
| ファイルを Drive へ置き、URL を返す |
upload の引数:
引数 | 内容 |
| ローカルのファイルパス |
| Drive 上の名前。省略時はファイル名(変換するときは拡張子を落とす) |
| 置き先フォルダの ID(フォルダ URL の |
|
|
|
|
| アップロードしたファイルに付ける共有設定のリスト。各要素は |
|
|
| user・group への共有で Google の通知メールを送るか。既定は送らない |
| 新しく作らず、以前 drivelift で上げたファイル(ID)の中身を差し替える。URL と共有設定はそのまま残る。 |
replace_id は同じレポートを直して配り直すためのもの。差し替えは中身の全置き換えで、Sheets 上で直接加えた編集やコメントは消える(以前の版は Drive の版の履歴に残る)。シートの内部 ID も変わるので、特定のタブを指すリンク(#gid=)は切れる。取り違えを防ぐため、差し替え先がゴミ箱にあるとき、今回のアップロード名と名前が違うとき、種類が違うとき(スプレッドシートにドキュメントを上げる等)は、送信せずに拒否する。drive.file の範囲なので、drivelift が作っていないファイルは差し替えられない。
共有は、利用者が指示したときだけ付ける前提で、ツールの説明にもそう書いてある。anyone は「リンクを知っている全員」になり外部公開と同じなので、利用者が明示したときだけ使う。共有の一部が失敗してもアップロードは取り消さず、結果の shared に1件ずつ成否を返す。
share_new_folder は、PR ごと・日付ごとのフォルダをチームに URL で渡すためのもの。フォルダへの共有の成否は folder_shared に返る(付けなかったときは空)。共有するのは末端のフォルダ(結果の folder_id)だけで、途中の階層を新しく作っていてもそこには付けない。フォルダの共有は中身に継承されるので、そのフォルダに後から置いたファイルも同じ相手に見える。再利用したフォルダに付けないのは、以前置いたファイルまで見えるようになるのを防ぐため。そのため、この機能より前に作ったフォルダや、作成時に共有が失敗したフォルダは、次回以降も共有されない。必要なら Drive の画面で手動で共有する。
auto の変換先: xlsx・xlsm・xls・ods・csv・tsv → スプレッドシート、docx・doc・odt・rtf・txt・md・html・htm → ドキュメント、pptx・ppt・odp → スライド。それ以外はそのまま置く。変換は Drive のインポート機能が行う。実機で確認したのは xlsx・csv(スプレッドシート)と md(見出しや表を解釈したドキュメント)で、ほかは Drive の対応形式に従う。
CLI
drivelift MCP stdio サーバーとして起動
drivelift doctor 導入状態と次の一手
drivelift login ブラウザでログイン(完了まで待つ)
drivelift import-secret [path] クライアント JSON の取り込み
drivelift setup-gcloud [--project ID] [--yes] gcloud で手順 1・2 を実行(--yes なしは計画表示)
drivelift upload <file> [--folder ID] [--folder-path A/B] [--name N] [--convert MODE]
[--share ROLE:TYPE[:TARGET]]... [--share-new-folder] [--notify] [--replace ID] [--json]upload は既定で URL だけを標準出力に出すので、スクリプトから拾いやすい。--share は繰り返し指定できる(例: --share reader:domain:example.com --share writer:user:alice@example.com)。共有に1件でも失敗すると(--share-new-folder によるフォルダの共有を含む)、URL は出したうえで終了コード 3 を返す。--share-new-folder を付けたのにフォルダが既存だった場合は、共有しなかったことを標準エラーに出す(終了コードは 0)。
設定
場所 | 内容 |
| Console からダウンロードした JSON( |
| リフレッシュトークンと access_token のキャッシュ(0600、平文) |
環境変数 | 設定ディレクトリの変更 |
環境変数 | ファイルの代わりにクライアントを渡す( |
チームで使う場合
代表者が1人で OAuth クライアントを作り、ダウンロードした JSON をメンバーに配る運用ができる。
配るのは JSON だけ。 各メンバーは
import_client_secret(またはmv)で取り込み、auth_startで自分のアカウントでログインする。トークンは各自の手元にだけあり、代表者の権限で他人が操作することはないGoogle Workspace なら同意画面は「内部」にする。 組織外のアカウントは認可できないので、JSON が外に漏れても組織外からは使えない。Google はデスクトップ種別の client_secret を秘密情報として扱わないが、配布はパスワード管理ツールや DM に留め、リポジトリには置かない
ファイルは各自のマイドライブに作られる。 共有したい相手には
shareで権限を付ける(例: 同じ組織の全員に閲覧権限なら{"role": "reader", "type": "domain", "target": "example.com"})チームの共有フォルダ(共有ドライブを含む)に置ける。 フォルダの ID を
folder_idに渡せば、各自の drivelift がそこへ直接作る。ただしfolder_pathのサブフォルダはメンバーごとに別々に作られる(Aさんの drivelift が作ったフォルダは、Bさんの drivelift からは見えないため)。全員で同じ場所に集めたいときは、サブフォルダを手で作ってその ID を配り、folder_idで指定する新しく作ったフォルダの URL を渡すなら
share_new_folderを付ける。 付けないと、共有されるのはファイルだけで、フォルダは作った本人しか開けないクライアントを作り直すと全員が
invalid_clientになる。 新しい JSON を配り直せば、取り込み時に古いトークンを破棄して再ログインに進むプロジェクトの Owner を2人以上にしておく。 代表者の異動や退職でクライアントを管理できなくなるのを防ぐ
Drive API の上限はプロジェクト単位で全員が共有する。 通常の利用で問題になる量ではない
制約と注意
uploadを常時許可すると、共有も常時許可したことになる。shareを使えば、1回の呼び出しで任意の外部アドレスやドメインに権限を付けられる(0.2.0 から)。ホストのツール許可で upload を「常に許可」にしている場合、プロンプトインジェクションでファイルを外部に共有される余地がある。0.1.0 で常に許可した人も、drivelift@0を指定していれば自動で新しい版(0.2.0 以降。0.3.0 からは差し替えreplace_id、0.4.0 からはフォルダ共有share_new_folderも)に上がる。uploadは MCP の注釈で破壊的操作(destructiveHint: true)と宣言している。気になる場合は upload を毎回確認する設定にする。share_new_folderも同じ扱いで、新しく作ったフォルダに限られるが、共有は以後そのフォルダに置くファイルにも及ぶfolder_idには、ログインしたアカウントが編集できるフォルダなら何でも指定できる。drivelift が作っていないフォルダや共有ドライブ内のフォルダでもよい(2026-09-25 に共有ドライブで確認)。ただし drive.file の権限では、そのフォルダの中身は見えない。そのためfolder_pathで再利用できるのは drivelift が作ったフォルダだけで、他の人や手で作った同名フォルダがあっても、別に同名のフォルダを作る同名ファイルがあっても上書きせず、新しいファイルを作る(Drive の既定どおり)。上書きは
replace_idで ID を明示したときだけuploadを常時許可していると、プロンプトインジェクションで drivelift が作ったファイルを別の中身に差し替えられる余地がある(replace_id、0.3.0 から)。drivelift が作ったもの以外には届かず、以前の版は版の履歴から戻せるtoken.jsonは暗号化していない。マシンを共有する環境ではDRIVELIFT_CONFIG_DIRを保護された場所に向けるGoogle Workspace の管理者がサードパーティアプリの API アクセスを制限している場合、「内部」クライアントでも認可できないことがある
開発
npm install
npm test
npm run buildテストは Google に接続しない(fetch を差し替え、ループバックのログインは実際のポートで検証する)。
ライセンス
MIT
Available Tools
6 toolsauth_startStart Google sign-inA
Begin the OAuth sign-in. Opens the Google consent page in the user's browser (loopback redirect on 127.0.0.1) and waits up to wait_seconds (default 90) for the user to finish; if they do, the result is state: completed and no further call is needed. Otherwise state: pending — call auth_status (with wait_seconds) to keep waiting. Requires an OAuth client (see status).
| Name | Required | Description | Default |
|---|---|---|---|
| open_browser | No | Default true. Set false to only return the URL. | |
| wait_seconds | No | Seconds to wait for the sign-in to finish before returning (default 90, 0 = return immediately). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint:false, openWorldHint:true), the description discloses the browser opening, loopback redirect, waiting behavior, and state outcomes (completed/pending). It also mentions the need for an OAuth client, adding valuable context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no waste, and the core purpose is front-loaded. It includes necessary details (loopback, wait, states) without fluff, striking a good balance between completeness and brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains the state machine (completed/pending) and the waiting behavior. It covers the prerequisite and points to status and auth_status. It does not mention error conditions explicitly, but the overall flow is sufficiently clear for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters fully documented. The description adds no new parameter-level meaning; it merely reinforces the behavior of wait_seconds. Baseline 3 is appropriate since the schema already carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Begin the OAuth sign-in' with a specific verb and resource, and distinguishes itself from siblings by referencing auth_status for the pending state and status for the client prerequisite. It leaves no ambiguity about the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to call auth_status (when state is pending) and notes the prerequisite of an OAuth client (see status). It does not contrast with all siblings, but the flow is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_statusCheck sign-in progressARead-only
Report the state of the sign-in started by auth_start: idle / pending / completed / failed. With wait_seconds it blocks until the sign-in settles or the time runs out.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_seconds | No | Seconds to wait for the sign-in to settle (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already signals this is a safe read, and the description adds meaningful behavioral context: the optional blocking behavior, the state vocabulary, and the timeout behavior. It doesn't contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the purpose and possible states, the second explains the optional blocking parameter. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only poller with one optional parameter, the description is complete: it names the states, explains the blocking behavior, and ties the tool to the auth_start workflow. No output schema exists, but 'report the state' plus the enumerated states sufficiently conveys the return concept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents wait_seconds, so the baseline is 3. The description adds value by explaining that wait_seconds blocks until the sign-in settles or time runs out, giving the parameter a behavioral meaning beyond 'seconds to wait.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Report'), a clear resource ('the sign-in started by auth_start'), and enumerates the exact state values (idle/pending/completed/failed). This makes it easy to distinguish from auth_start (which starts the flow) and the unrelated sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool's context is clear: it should be used after auth_start and can optionally block via wait_seconds. It doesn't explicitly spell out when not to use it or name alternatives, but the resource and workflow are specific enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gcloud_setupRun setup steps 1-2 with gcloudA
For users who have the gcloud CLI: prepare a Google Cloud project and enable the Drive API on the user's behalf. Without confirm it only reports what it would run (planned_commands) — show that to the user and ask for approval. With confirm: true it runs those commands (and gcloud auth login, opening a browser, if gcloud has no active account). Steps 3-4 (consent screen, Desktop-app OAuth client) cannot be automated and are returned as next_steps with project-scoped Console links, plus console_form with sample values for every field (show it to the user as a table).
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Default false (plan only). true = execute the planned commands. | |
| project_id | No | Project ID to use or create. Default: gcloud's current project, else a generated drivelift-xxxxxxxx. | |
| login_if_needed | No | Default true. With confirm, run `gcloud auth login` when no gcloud account is active. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavior: without confirm it only reports planned commands; with confirm it executes commands, may run `gcloud auth login`, and may open a browser if no account is active. It also reveals that a project may be created or generated, and that steps 3-4 are returned as next_steps—all useful side-effect context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: it front-loads the core purpose, then explains the two execution modes, then clearly summarizes what the tool cannot do. Every sentence contributes a distinct fact, and there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description adequately covers the key returned artifacts: planned_commands, next_steps, and console_form with sample values. It also explains the side-effect behavior and the division between automated steps and manual steps, giving an agent enough information to call the tool correctly and interpret its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters well. The description adds context around the overall execution flow, but it largely mirrors the parameter descriptions for confirm, project_id, and login_if_needed rather than adding meaning beyond them. Baseline 3 is appropriate because the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: prepare/configure a Google Cloud project and enable the Drive API for users with the gcloud CLI. It also distinguishes itself from the remaining setup steps by explicitly saying steps 3-4 cannot be automated and are returned as next_steps, making its scope clear against sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear guidance: it is for users who have the gcloud CLI, and it fully explains the two modes—plan-only without confirm, and execution with confirm—so an agent knows when to ask for approval. It does not name sibling tools as alternatives, but it does state the boundary between what this tool can do and what must remain as next_steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_client_secretImport OAuth client JSONA
Copy a downloaded OAuth client JSON (Desktop app type) into drivelift's config directory. Pass the file path; the secret itself never enters the conversation. Without a path, it only lists client_secret*.json candidates in ~/Downloads (newest first) and copies nothing — confirm with the user, then call again with the chosen path.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path to the downloaded client_secret_*.json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false in annotations, the description carries the behavioral burden and adds valuable context: it copies rather than moves, never exposes the secret in conversation, and copies nothing when the path is omitted. It does not mention overwrite behavior when the config file already exists, so it stops short of full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, then the conditional list mode and confirmation step. Every sentence earns its place with no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional parameter with no output schema, this is nearly complete: it covers both call modes, the list output ordering, and the required user-confirmation step. The only gap is unspecified behavior for invalid paths or existing config-file collisions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents path with 100% coverage, so the baseline is 3. The description reinforces that omitting the path triggers listing, but it adds no new format or value constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: copy a downloaded OAuth client JSON into drivelift's config directory. It also documents the optional list-only mode, making the tool's dual purpose unmistakable and distinct from siblings like upload or auth_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit invocation rules: call without a path to list candidates, and call with a path to import, including a confirm-then-call-again protocol. It does not explicitly contrast with sibling tools, but the two modes are so clearly specified that an agent knows exactly when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusCheck drivelift setup statusARead-only
Report whether drivelift can upload to Google Drive right now. Returns state (no_client / no_token / token_invalid / api_disabled / ready), a message, next_steps, and urls. When not ready, relay next_steps to the user verbatim — they contain the exact Google Cloud Console links, a gcloud_setup hint when gcloud is installed, and a ready-made mv command when a downloaded client JSON is found in ~/Downloads. console_form lists sample values for every Console field in steps 3-4; show it to the user as a table so they can fill the forms without guessing. drivelift uses a bring-your-own OAuth client (Desktop app type) and the drive.file scope only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns by calling this a 'Report' operation. It adds meaningful context beyond annotations by listing the returned fields, the state enum, and the specific instruction to relay next_steps verbatim, as well as noting the BYO OAuth client and drive.file scope. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then packs in output details, user-relaying instructions, console_form usage, and OAuth context. It is longer than average but every sentence carries actionable information; only the final contextual sentence is slightly extra, though still relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values, and it does so thoroughly: state enum, message, next_steps, urls, and console_form. It also tells the agent exactly how to relay next_steps and when to show console_form as a table, making this complete for a zero-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100%, so there is nothing for the description to explain about inputs. The baseline of 4 applies here; the description appropriately focuses on outputs instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Report whether drivelift can upload to Google Drive right now.' It enumerates the exact return states (no_client / no_token / token_invalid / api_disabled / ready), which clearly distinguishes this setup-level status check from the sibling auth_status tool without needing to inspect either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool — whenever you need to know if an upload is currently possible — and gives post-invocation guidance ('When not ready, relay next_steps to the user verbatim'). However, it never explicitly compares itself to alternatives like auth_status or states when not to use it, so selection guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uploadUpload a local file to Google DriveA
Upload a local file to Google Drive and return its URL. By default (convert: auto) spreadsheets (xlsx/csv/tsv/ods) become Google Sheets, documents (docx/md/txt/html/rtf/odt) become Google Docs, and slides (pptx/odp) become Google Slides via Drive's own import, which carries over most formatting. Other files are stored as-is. Files go to My Drive root unless folder_id is given. If drivelift is not set up, the error carries next_steps to relay to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name in Drive. Default: the file name (extension dropped when converting) | |
| path | Yes | Local file path (absolute, or relative to the server's working directory) | |
| convert | No | auto (default) / none / spreadsheet / document / presentation | |
| folder_id | No | Destination folder ID (the part after /folders/ in the folder URL). Caution: with the drive.file scope, folders that drivelift did not create are usually invisible to it and Drive returns 404; omit it to upload to My Drive root. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds valuable behavioral context: conversion rules for various file types, default destination, and error behavior with next_steps. It does not contradict the annotations and provides meaningful detail beyond them, though it could mention potential side effects like overwriting existing files (though it doesn't, which is fine as it's not destructive).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, with each sentence adding distinct value. It is front-loaded with the core action and return value, then logically progresses to conversion behavior, destination, and error handling. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, all documented, and no output schema, the description is complete. It explains return value (URL), conversion behavior, folder handling, and error handling. The complexity is moderate, but the description covers all necessary aspects for an agent to invoke it correctly, including edge cases like folder_id visibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters have descriptions. The description significantly enhances this by explaining the convert enum in detail (what happens with auto, which file types map to which Google format), cautioning about folder_id with drive.file scope (404 risk), and clarifying the name default (extension dropped when converting). This goes well beyond the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (upload a local file), the target (Google Drive), and the outcome (return its URL). It also details conversion behavior for different file types, which distinguishes it from any potential sibling upload tools. The verb 'upload' is specific and the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on default behavior (My Drive root) and when to use folder_id, and it explains error handling when drivelift is not set up. While it doesn't explicitly state when not to use this tool or name alternatives, the sibling tools are all auth/setup related, so the usage context is clear. It could be more explicit about prerequisites (e.g., auth required), but the mention of drivelift setup covers that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
auth_start - First observed
auth_status - First observed
gcloud_setup - First observed
import_client_secret - First observed
status - First observed
upload
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: status reports readiness, auth_start/auth_status manage the OAuth flow, import_client_secret handles client credentials, gcloud_setup automates project preparation, and upload performs the core action. No overlapping or ambiguous tools.
All tool names follow a consistent lowercase_with_underscores style, with clear verbs (auth_start, import_client_secret, upload) and descriptive nouns (status, auth_status, gcloud_setup). The naming is uniform and intuitive, with no mixed conventions.
With 6 tools, the set is well-scoped for the server's purpose of uploading files to Google Drive with full setup and authentication support. Each tool earns its place, neither too sparse nor overwhelming.
The tool surface covers the entire lifecycle from readiness checks, authentication (both manual and gcloud-assisted), credential import, and upload. There are no dead ends or missing operations for the stated domain.
Maintenance
Related MCP Connectors
File uploads for AI agents. Upload, list, and manage files. No signup required.
Give Claude only the Google Drive files you choose. Every action logged.
Upload any file, get a tracked shareable link. DocSend for AI agents.
Create and manage documents, spreadsheets, and presentations from your AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI models to search, list, and read files from Google Drive with automatic format conversion for Google Workspace documents.4,526 npmMIT
- FlicenseAqualityDmaintenanceEnables AI assistants to interact with Google Drive, including reading, searching, listing folders, and uploading files.71-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to automate Google Drive tasks such as provisioning workspaces, reusing templates, inspecting folder structures, updating reports, and sharing files through user-controlled OAuth.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to make real in-place edits to Google Drive files—preserving file IDs, revision history, comments, and sharing—while also supporting appends, targeted find-and-replace, reads, searches, and file creation.MIT