·

Google Drive MCP với Gemini CLI

Cài đặt Google Drive MCP trong Gemini CLI để AI agent có thể tìm kiếm, đọc và tổ chức file ngay trong trình soạn thảo.

Gemini CLI là công cụ dòng lệnh chính chủ của Google để chạy Gemini như một coding agent trong terminal, và có một điểm khá thú vị: vì cùng thuộc hệ sinh thái Google, việc kết nối Gemini CLI với Google Drive MCP thường mượt hơn một chút về mặt xác thực so với các client bên thứ ba — dù bản chất vẫn phải qua đúng luồng OAuth 2.0 tiêu chuẩn của Drive API, không có "đường tắt" nào đặc biệt. Bài này hướng dẫn cấu hình cụ thể trong settings.json, cách đọc Docs/Slides/PDF từ terminal, một ví dụ thực tế trích xuất acceptance criteria từ deck của stakeholder, và cách hành vi của Gemini CLI khác với Claude Code khi cùng dùng một Google Drive MCP server.

Cài Đặt Và Kết Nối Google Drive MCP Vào Gemini CLI

Gemini CLI đọc cấu hình MCP server từ key mcpServers trong file settings.json, có thể đặt ở project (.gemini/settings.json) hoặc user (~/.gemini/settings.json). Trước khi cấu hình, tạo OAuth Client ID loại "Desktop app" trong Google Cloud Console, bật Google Drive API cho project đó, và ghi lại Client ID + Client Secret.

Chuẩn bị credential:

export GDRIVE_OAUTH_CLIENT_ID="1234567890-abc.apps.googleusercontent.com"
export GDRIVE_OAUTH_CLIENT_SECRET="GOCSPX-xxxxxxxxxxxxxxxxxxxx"

Khai báo trong .gemini/settings.json:

{
  "mcpServers": {
    "gdrive": {
      "command": "npx",
      "args": ["-y", "@isaacphi/mcp-gdrive"],
      "env": {
        "CLIENT_ID": "$GDRIVE_OAUTH_CLIENT_ID",
        "CLIENT_SECRET": "$GDRIVE_OAUTH_CLIENT_SECRET",
        "GDRIVE_CREDS_DIR": "$HOME/.config/gdrive-mcp"
      },
      "timeout": 20000,
      "trust": false
    }
  }
}

Trường trust: false (mặc định) khiến Gemini CLI hỏi xác nhận mỗi khi agent gọi một tool ghi từ server này lần đầu trong phiên. Với Google Drive dùng scope readonly, hầu hết tool là read-only nên ảnh hưởng không nhiều, nhưng nếu bạn nâng scope lên có quyền ghi, nên giữ trust: false để không auto-approve mù hành động tạo/sửa file trên Drive thật.

Nếu muốn giới hạn tool được expose (ví dụ chỉ cho phép search và đọc, không cho phép các tool ghi dù server có hỗ trợ), dùng includeTools:

{
  "mcpServers": {
    "gdrive": {
      "command": "npx",
      "args": ["-y", "@isaacphi/mcp-gdrive"],
      "env": {
        "CLIENT_ID": "$GDRIVE_OAUTH_CLIENT_ID",
        "CLIENT_SECRET": "$GDRIVE_OAUTH_CLIENT_SECRET",
        "GDRIVE_CREDS_DIR": "$HOME/.config/gdrive-mcp"
      },
      "includeTools": ["gdrive_search", "gdrive_read_file", "gdrive_list_files"]
    }
  }
}

Kiểm tra kết nối:

Trong phiên gemini, gõ:

/mcp list

để xem trạng thái server (connected/disconnected/needs auth) và danh sách tool nó expose. Lần đầu gọi một tool gdrive_*, Gemini CLI mở browser để bạn đăng nhập Google và cấp quyền theo scope đã cấu hình phía server; token sau đó lưu cục bộ trong GDRIVE_CREDS_DIR và tự refresh.

/mcp desc gdrive nếu cần xem mô tả chi tiết từng tool — hữu ích khi debug trường hợp agent chọn nhầm tool (ví dụ gọi gdrive_search với query quá hẹp dẫn đến không ra kết quả, dù file thực sự tồn tại).

Mẹo: Giữ trust: false cho server gdrive trong mọi môi trường trừ máy cá nhân bạn hoàn toàn kiểm soát — kể cả khi bạn chỉ dùng scope readonly, việc phải xác nhận thủ công lần gọi tool đầu tiên mỗi phiên vẫn là một lớp phòng vệ hữu ích để bạn nhận biết chính xác khi nào agent bắt đầu chạm vào dữ liệu Drive thật.

Đọc Docs, Slides Và PDF Từ Gemini CLI

Sau khi server connected, bạn ra lệnh bằng ngôn ngữ tự nhiên. Với Google Docs, kết quả trích xuất thường sạch và có cấu trúc heading rõ ràng vì Drive export thẳng sang Markdown:

Đọc file "Technical Design - Notification Service" trên Drive,
tóm tắt phần "Delivery Guarantees" thành 3 bullet, giữ nguyên các
thuật ngữ kỹ thuật gốc (ví dụ at-least-once, exactly-once) không
dịch hay diễn giải lại.

Với Google Slides, cấu trúc trích xuất khác hẳn — nội dung trả về theo từng slide, không có heading phân cấp như Docs, nên cần prompt rõ ràng hơn về việc bạn muốn agent xử lý theo thứ tự nào:

Đọc file Slides "Q3 Roadmap Review", xử lý theo đúng thứ tự slide
từ đầu tới cuối, và với mỗi slide có tiêu đề bắt đầu bằng "Feature:",
trích ra tên feature và trạng thái (nếu slide có nhắc "Done",
"In Progress" hoặc "Planned").

Với PDF, kết quả phụ thuộc vào việc file có text layer (PDF sinh từ Word/Docs export) hay chỉ là ảnh scan. Với hợp đồng hoặc tài liệu pháp lý dạng scan, luôn cảnh báo agent về khả năng lỗi OCR:

Đọc file "MSA - Vendor ABC.pdf". Trích xuất các điều khoản về
thời hạn hợp đồng, điều kiện chấm dứt hợp đồng, và penalty nếu vi
phạm SLA. Nếu đoạn text nào có dấu hiệu lỗi OCR (ký tự lạ, câu
không có nghĩa), đánh dấu rõ [CẦN KIỂM TRA LẠI BẢN GỐC] thay vì
tự suy diễn nội dung.

Mẹo: Với Slides, luôn yêu cầu agent xử lý "theo đúng thứ tự slide" một cách rõ ràng trong prompt. Nếu không, một số MCP server trả kết quả theo thứ tự object nội bộ trong file XML, có thể không khớp với thứ tự người thuyết trình thực sự trình bày — dẫn đến agent hiểu sai luồng logic của bài thuyết trình.

Ví Dụ Thực Tế: Trích Xuất Acceptance Criteria Từ Deck Của Stakeholder

Đây là tình huống rất thường gặp: stakeholder trình bày yêu cầu qua một deck Slides trong buổi họp kick-off, nhưng không viết acceptance criteria rõ ràng theo format kỹ thuật — bạn cần agent đọc và chuyển hoá thành checklist có thể dùng để viết test case.

Prompt trích xuất đầy đủ:

Đọc file Slides "Kickoff Deck - Loyalty Tier Upgrade". Với mỗi slide
mô tả một tính năng hoặc luồng nghiệp vụ cụ thể (bỏ qua các slide
mở đầu/kết thúc không mang nội dung nghiệp vụ):
1. Xác định tên tính năng/luồng.
2. Suy ra acceptance criteria dạng Given/When/Then dựa trên nội dung
   mô tả trên slide (kể cả khi slide chỉ viết bullet ngắn, không
   viết đầy đủ câu).
3. Đánh dấu rõ criteria nào là suy luận của bạn (không có câu chữ
   tương ứng trực tiếp trên slide) để tôi biết cần confirm lại với
   stakeholder.

Trình bày dạng bảng: Tên tính năng | Given | When | Then | Suy luận
hay trích trực tiếp.

Agent xử lý ra sao:

Gemini CLI gọi gdrive_read_file để lấy toàn bộ text theo từng slide, sau đó tự phân đoạn theo slide và suy luận acceptance criteria — đây hoàn toàn là suy luận ngôn ngữ tự nhiên dựa trên nội dung bullet ngắn gọn của slide, không phải trích xuất máy móc. Vì vậy, việc yêu cầu agent tự đánh dấu "suy luận hay trích trực tiếp" ở bước 3 rất quan trọng — nó giúp bạn phân biệt được đâu là điều chắc chắn từ stakeholder, đâu là phần agent tự bổ sung để lấp khoảng trống thông tin.

Review và tinh chỉnh sau khi có bảng đầu tiên:

Với 3 dòng trong bảng trên được đánh dấu "suy luận", hãy đọc lại kỹ
slide tương ứng và liệt kê chính xác câu chữ trên slide khiến bạn
đưa ra suy luận đó — để tôi đối chiếu lại với ghi âm buổi họp (nếu có).

Bước review này giúp bạn xác nhận agent không "bịa" acceptance criteria từ những slide chỉ có hình ảnh minh hoạ mà không có nội dung nghiệp vụ cụ thể.

Mẹo: Luôn yêu cầu agent phân loại rõ "trích trực tiếp" và "suy luận" khi làm việc với nguồn dữ liệu vốn không có cấu trúc rõ ràng như slide thuyết trình. Đây là kỹ thuật quan trọng để giảm rủi ro hallucination khi bạn giao cho agent một nguồn thông tin mơ hồ về bản chất.

So Sánh Kết Quả Google Drive MCP Giữa Gemini CLI Và Claude Code

Cùng một Google Drive MCP server (@isaacphi/mcp-gdrive hoặc tương đương) có thể gắn vào cả Gemini CLI và Claude Code, nhưng hành vi sử dụng tool không hoàn toàn giống nhau.

Cách chọn tool và số lượt gọi. Với prompt yêu cầu xử lý một folder nhiều file, cả hai đều có khả năng tự chia thành chuỗi tool call (gdrive_list_files rồi lặp gdrive_read_file cho từng file), nhưng số lượt gọi cụ thể và cách tóm tắt kết quả trung gian giữa các lượt có thể khác nhau tuỳ model — đừng giả định output giống nhau 100% khi đổi agent, dù cùng server MCP và cùng prompt.

Cơ chế xác nhận trước khi ghi. Gemini CLI có cờ trust theo từng server, Claude Code có cơ chế permission riêng theo pattern tool. Cả hai đều hướng tới human-in-the-loop cho hành động ghi, nhưng trải nghiệm hỏi-xác nhận khác nhau — nếu team dùng cả hai công cụ, nên thống nhất rõ mức độ tự động cho phép ở mỗi công cụ để tránh tình trạng một agent auto-approve còn agent khác chặn lại gây khó hiểu khi so sánh kết quả.

Cách xử lý Slides. Đây là điểm khác biệt đáng chú ý nhất trong thực tế: vì thuộc cùng hệ sinh thái Google, Gemini có xu hướng "hiểu" cấu trúc slide (thứ tự, phân đoạn theo tiêu đề) nhất quán hơn một chút so với khi Claude Code xử lý cùng dữ liệu thô xuất ra từ MCP server — dù cả hai đều nhận đúng cùng một chuỗi text từ server, sự khác biệt nằm ở cách model suy luận ngữ cảnh từ text đó, không nằm ở tool. Luôn thử cả hai nếu kết quả một bên không đạt yêu cầu.

Mẹo: Nếu team dùng cả Gemini CLI và Claude Code cho việc đọc tài liệu Drive, lưu lại một file docs/gdrive-mcp-prompts.md ghi rõ prompt nào chạy tốt trên client nào — tránh tình trạng cả team dùng chung một bộ prompt viết cho Claude Code rồi thất vọng khi chạy trên Gemini CLI cho kết quả khác đi.

Mẹo Và Lưu Ý Thực Chiến

  • Luôn bắt đầu với includeTools chỉ gồm gdrive_searchgdrive_read_file trước khi mở thêm các tool khác, để làm quen hành vi agent với dữ liệu Drive thật của công ty trước khi mở rộng quyền.
  • Dùng biến môi trường ($GDRIVE_OAUTH_CLIENT_SECRET) trong settings.json thay vì giá trị cứng, và thêm .gemini/settings.json vào .gitignore nếu file chứa giá trị nhạy cảm ngoài biến môi trường.
  • Với các tác vụ trích xuất lặp lại hàng tuần (ví dụ tổng hợp roadmap từ deck cập nhật mỗi thứ Hai), lưu prompt thành snippet tái sử dụng, tránh soạn lại từ đầu và giảm rủi ro quên điều kiện quan trọng (ví dụ quên giới hạn theo folder khi công ty có nhiều shared drive).

Mẹo: Trước khi giao Google Drive MCP cho một thành viên mới trong team dùng Gemini CLI, để họ chạy thử với một tài khoản Google chỉ có quyền view trên một folder test — quan sát cách họ ra prompt và cách agent phản hồi, trước khi cấp quyền truy cập rộng hơn trên Drive thật của công ty.