OpenCode là coding agent chạy terminal, mã nguồn mở, hỗ trợ MCP (Model Context Protocol) qua file cấu hình opencode.json, cho phép bạn gắn thêm bất kỳ server MCP nào — bao gồm Google Drive — vào cùng ngữ cảnh làm việc với code. Bài này hướng dẫn cài đặt cụ thể cho OpenCode, cách liệt kê/tìm/đọc file Drive từ terminal, một ví dụ thực tế tổng hợp requirement từ một thư mục tài liệu, và những hạn chế bạn cần biết trước khi phụ thuộc vào OpenCode cho workflow đọc tài liệu Drive.
Nếu chưa đọc bài "Google Drive MCP Là Gì?" ở đầu module, nên đọc trước để hiểu các tool cốt lõi (gdrive_search, gdrive_read_file) và các hướng xác thực — bài này tập trung thẳng vào thực hành với OpenCode.
Cài Đặt Và Kết Nối Google Drive MCP Vào OpenCode
OpenCode đọc cấu hình MCP server từ file opencode.json ở root project, hoặc từ ~/.config/opencode/opencode.json nếu bạn muốn áp dụng cho mọi project trên máy. Cấu trúc khai báo dùng key mcp (không phải mcpServers như một số client khác — đây là điểm dễ gây nhầm khi bạn copy config qua lại giữa các tool):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gdrive": {
"type": "local",
"command": ["npx", "-y", "@isaacphi/mcp-gdrive"],
"environment": {
"CLIENT_ID": "{env:GDRIVE_OAUTH_CLIENT_ID}",
"CLIENT_SECRET": "{env:GDRIVE_OAUTH_CLIENT_SECRET}",
"GDRIVE_CREDS_DIR": "{env:HOME}/.config/gdrive-mcp"
},
"enabled": true
}
}
}
Lưu ý cú pháp interpolate biến môi trường của OpenCode là {env:VAR_NAME}, khác với ${VAR} bạn thường thấy ở Claude Code hay các tool Node.js khác — chép nhầm cú pháp là lỗi phổ biến nhất khi migrate config giữa hai client.
Trước khi chạy, đảm bảo bạn đã tạo OAuth Client ID (loại "Desktop app") trong Google Cloud Console và bật Google Drive API cho project đó, set biến môi trường tương ứng:
export GDRIVE_OAUTH_CLIENT_ID="1234567890-abc.apps.googleusercontent.com"
export GDRIVE_OAUTH_CLIENT_SECRET="GOCSPX-xxxxxxxxxxxxxxxxxxxx"
Khởi động OpenCode và kiểm tra trạng thái server bằng lệnh trong TUI (terminal user interface):
/mcp
Lệnh này hiện danh sách server đã khai báo cùng trạng thái (connected/disconnected/error) và danh sách tool mỗi server expose. Lần đầu một tool gdrive_* được gọi, OpenCode sẽ in ra URL consent — mở trong browser, đăng nhập, cấp quyền theo scope đã cấu hình. Token cache lưu trong GDRIVE_CREDS_DIR, tự refresh ở các lần chạy sau.
Nếu server báo lỗi ngay khi khởi động, nguyên nhân phổ biến nhất là quên đặt "enabled": true, hoặc gói @isaacphi/mcp-gdrive chưa được cache lần đầu bởi npx (thử chạy tay npx -y @isaacphi/mcp-gdrive một lần ngoài OpenCode để xem log lỗi rõ hơn).
Mẹo: Luôn set
"enabled": falsetạm thời cho servergdrivekhi bạn đang làm việc thuần code không cần Drive, để giảm số lượng tool được nạp vào context của model — quá nhiều tool không dùng tới vẫn chiếm một phần context window (cửa sổ ngữ cảnh) mỗi lượt suy luận, dù bạn không gọi tới.
Liệt Kê, Tìm Kiếm Và Đọc File Drive Từ OpenCode
Sau khi kết nối, bạn ra lệnh bằng ngôn ngữ tự nhiên ngay trong phiên chat của OpenCode. Thử tìm kiếm cơ bản trước:
Tìm trên Google Drive các file Google Docs có chữ "API rate limiting"
trong tiêu đề hoặc nội dung, liệt kê tên file và ngày sửa gần nhất.
OpenCode sẽ gọi gdrive_search, hiện kết quả dạng bảng trong terminal. Với thư mục cụ thể đã biết, dùng gdrive_list_files (một số fork gọi gdrive_list_folder) để liệt kê toàn bộ file trong đó, không cần đoán từ khoá:
Liệt kê toàn bộ file trong folder "Product Specs / 2026" trên Drive,
kèm mimeType của mỗi file để tôi biết cái nào là Doc, cái nào là
Sheet hay Slide.
Đọc nội dung một file cụ thể sau khi có fileId hoặc tên chính xác:
Đọc nội dung file "Rate Limiting - Design Doc" và tóm tắt phần
"Algorithm" thành 3 bullet, giữ nguyên các con số cụ thể (ví dụ
giới hạn request/giây) không được làm tròn hay diễn giải lại.
Với Google Sheets, gdrive_read_file trả về nội dung dạng CSV — hữu ích khi bạn cần agent đọc bảng dữ liệu cấu hình hoặc bảng theo dõi tiến độ:
Đọc file Google Sheets "Feature Rollout Tracker", lọc ra các dòng
có cột "Status" là "Blocked", liệt kê tên feature, người phụ trách,
và lý do block ở cột "Notes".
Mẹo: Với Google Sheets nhiều tab (sheet con), luôn hỏi rõ agent đang đọc tab nào — một số fork MCP chỉ export tab đầu tiên (mặc định), khiến agent trả kết quả từ sai tab nếu dữ liệu bạn cần nằm ở tab thứ hai hoặc thứ ba mà không có cảnh báo gì.
Ví Dụ Thực Tế: Tổng Hợp Requirement Từ Một Thư Mục Tài Liệu
Đây là workflow thực tế phổ biến khi bắt đầu một epic mới: business đã để lại một loạt tài liệu rải rác trong một folder, và bạn cần một bản tổng hợp requirement trước khi bắt tay code.
Trong folder "Epic - Loyalty Program" trên Drive, có nhiều Google Docs
và một vài Slides. Với mỗi file:
1. Đọc toàn bộ nội dung.
2. Trích ra danh sách requirement liên quan tới tích điểm, đổi quà,
và hạng thành viên.
3. Ghi rõ requirement đó lấy từ file nào.
Sau khi xử lý hết folder, tổng hợp lại thành một danh sách duy nhất,
loại bỏ requirement trùng lặp giữa các file, và đánh dấu rõ requirement
nào chỉ xuất hiện ở một file duy nhất (có thể là ý tưởng chưa chốt,
cần confirm lại với product owner).
OpenCode sẽ lần lượt gọi gdrive_list_files để lấy danh sách file trong folder, sau đó gọi gdrive_read_file cho từng file, và tự suy luận để gộp/loại trùng — đây là suy luận ngôn ngữ tự nhiên của agent, không phải logic dedup cứng, nên với requirement diễn đạt khác câu chữ nhưng cùng ý nghĩa, kết quả gộp có thể không hoàn hảo 100% và cần bạn review lại.
Sau khi có danh sách tổng hợp, yêu cầu ghi ra file trong repo để làm input cho bước viết spec kỹ thuật:
Lưu danh sách requirement đã tổng hợp vào file
docs/loyalty-program-requirements.md, giữ nguyên cấu trúc: mỗi
requirement là một bullet, kèm (nguồn: tên file) ở cuối mỗi bullet.
Mẹo: Với folder chứa trên 15-20 file, chia thành nhiều lượt nhỏ (ví dụ theo tên file bắt đầu bằng ký tự A-M, rồi N-Z) thay vì yêu cầu agent xử lý toàn bộ trong một lượt — tài liệu dài kết hợp số lượng file lớn dễ khiến agent bỏ sót file cuối cùng do context window (cửa sổ ngữ cảnh) bị lấp đầy bởi nội dung các file đọc trước.
Hạn Chế Của Google Drive MCP Trong OpenCode
Trước khi phụ thuộc hoàn toàn vào OpenCode cho workflow đọc Drive, cần biết rõ vài hạn chế thực tế.
Không có UI xác nhận trực quan cho quyền ghi. Khác với VS Code extension của Claude Code (hiện panel review trước khi ghi), OpenCode ở dạng TUI thuần terminal — permission prompt chỉ là dòng text hỏi yes/no. Với server chỉ có tool đọc như cấu hình drive.readonly ở trên thì không đáng lo, nhưng nếu bạn nâng scope lên drive (có quyền ghi), hãy đặc biệt cẩn trọng vì không có preview nội dung trực quan trước khi confirm.
Google Slides export chưa ổn định. Nhiều fork MCP hiện tại xử lý Slides bằng cách export text thô theo thứ tự object trong file XML nội bộ, không phải theo thứ tự đọc tự nhiên của con người trên slide. Với slide có nhiều text box đặt chồng chéo về vị trí, thứ tự trích xuất có thể lộn xộn — luôn kiểm tra lại kỹ khi nguồn dữ liệu quan trọng nằm trong Slides.
Rate limit từ Google Drive API. Drive API có quota mặc định theo project (thường 1000 request/100 giây/user cho tier miễn phí). Khi bạn để agent quét một folder rất lớn (hàng trăm file) trong một lượt, dễ gặp lỗi 429 Too Many Requests. OpenCode không tự động retry với backoff cho mọi trường hợp lỗi từ MCP server — một số fork MCP có retry nội bộ, một số không, nên cần kiểm tra kỹ package bạn chọn.
Không có tool tìm kiếm ngữ nghĩa (semantic search) sẵn có. gdrive_search dựa trên full-text search của Drive (khớp từ khoá), không hiểu ý nghĩa. Nếu bạn tìm "vấn đề khách hàng phàn nàn về tốc độ" nhưng tài liệu gốc dùng từ "latency issue", search có thể không khớp — nên luôn thử nhiều biến thể từ khoá, cả tiếng Việt và tiếng Anh nếu tài liệu công ty pha trộn ngôn ngữ.
Mẹo: Khi search không ra kết quả mong đợi, đừng vội kết luận tài liệu không tồn tại — yêu cầu agent thử lại với ít nhất 2-3 biến thể từ khoá khác nhau (đồng nghĩa, viết tắt, cả tiếng Anh và tiếng Việt) trước khi báo "không tìm thấy tài liệu liên quan".
Mẹo Và Lưu Ý Thực Chiến
Vài điều rút ra khi dùng Google Drive MCP với OpenCode cho công việc phân tích tài liệu thực tế:
- OpenCode phù hợp nhất cho workflow chạy batch không cần giám sát chặt (ví dụ tổng hợp requirement định kỳ mỗi sáng thứ Hai) hơn là workflow tương tác cần review từng bước — vì thiếu UI trực quan cho phần review nội dung trước khi ghi.
- Luôn tách riêng OAuth Client ID dùng cho OpenCode khỏi Client ID dùng cho các client khác (Claude Code, Cursor) nếu chạy trên cùng một máy, để tránh xung đột token cache khi nhiều tiến trình cùng đọc/viết vào
GDRIVE_CREDS_DIR. - Với team đã quen dùng cấu hình
mcpServerstừ các client khác, luôn nhớ đổi sang keymcpvà cú pháp{env:VAR}khi port config sang OpenCode — copy nguyên file.mcp.jsoncũ sang sẽ không hoạt động.
Mẹo: Viết một file
docs/gdrive-mcp-playbook.mdlưu lại các prompt đã kiểm chứng hiệu quả (search, tổng hợp requirement, đọc Sheet theo tab) cho riêng OpenCode, vì cú pháp và hành vi tool đôi khi khác nhẹ so với client khác — tránh tình trạng cả team dùng chung playbook viết cho Claude Code rồi thất vọng khi kết quả trên OpenCode không giống hoàn toàn.