Kết nối Google Drive được quản lý¶
Trong Cài đặt → MCP, thêm Kết nối được quản lý → Tệp Google Drive. Nhập ID thư mục được phép truy cập và JSON credential Google. Lưu, khám phá công cụ rồi chọn trong MCP node hoặc slot Agent hiện có. Không cần loại node mới. Khám phá công cụ không gọi Google; lần gọi thật mới kiểm tra thư mục và quyền Google.

Chọn credential¶
Bật Google Drive API trong dự án Google Cloud. Credential được mã hoá, không trả lại và để trống khi sửa; để trống giá trị đã lưu sẽ giữ nguyên. Không đặt khoá/token trong workflow JSON hay gửi credential thật qua chat.
My Drive cá nhân: dùng credential OAuth đã cấp quyền Drive và truy cập offline, theo dạng:
{
"type": "authorized_user",
"client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
"client_secret": "YOUR_CLIENT_SECRET",
"refresh_token": "YOUR_REFRESH_TOKEN"
}
Chỉ có access token hoặc tệp client-secret dạng web/installed chưa đủ:
cần hoàn tất luồng đồng ý của Google với quyền offline trước. Adapter làm mới
grant hiện có tại endpoint Google cố định; không thêm scope hay cung cấp màn
hình đồng ý tương tác. Đọc thư mục thông thường cần grant phù hợp như
drive.readonly hoặc drive; tạo tệp cần quyền ghi như drive. Grant hẹp
drive.file chỉ thấy tệp/thư mục đã cho ứng dụng đó truy cập. Thiết lập đồng
ý/xác minh ứng dụng, hết hạn token của app thử nghiệm và thu hồi quyền vẫn do
ứng dụng Google quản lý. Xem hướng dẫn offline của Google.
Service account: dán toàn bộ JSON key với type: "service_account",
client_email và private key RSA, rồi cấp quyền vào thư mục đã cấu hình.
Lần gọi dùng scope Drive, không giả danh người dùng uỷ quyền. Có thể đọc thư
mục được chia sẻ phù hợp, nhưng tạo tệp cần Shared Drive, tự nhận biết từ
metadata thư mục. Service account không có dung lượng cá nhân và không thể
sở hữu tệp My Drive; chia sẻ thư mục My Drive thường với quyền chỉnh sửa
không bỏ giới hạn này. Xem quy tắc dung lượng/quyền sở hữu của Google.
Với cả hai loại credential, danh tính Google phải có quyền đọc thư mục; tạo tệp cần thêm quyền thêm tệp con và dung lượng khả dụng. Giới hạn tổ chức của Shared Drive vẫn áp dụng. Studio kiểm tra quyền kết nối cá nhân/tổ chức trước khi dùng grant.
Phạm vi thư mục và công cụ¶
Sao chép ID thư mục từ URL Drive, không dán cả URL. Không chấp nhận root.
Kết nối chỉ cho phép tệp con trực tiếp, chưa vào thùng rác. Không tìm đệ
quy, đi theo shortcut hay tải từ URL tuỳ ý. Đổi thư mục làm thao tác cũ không
đối soát được; khôi phục thư mục gốc trước khi kiểm tra kết quả cũ. Studio
không khoá việc di chuyển/chỉnh sửa bên ngoài.
| Công cụ | Tham số | Kết quả |
|---|---|---|
list_files |
Tuỳ chọn name_contains, page_size (1–100, mặc định 25), page_token |
Trang metadata có giới hạn và next_page_token; chuỗi tên được escape, không nhận query thô |
get_file |
file_id |
ID, tên, MIME type và kích thước/thời gian/liên kết nếu có của tệp được phép |
read_text_file |
file_id |
Metadata và content UTF-8; tệp văn bản/JSON/XML hoặc Google Doc xuất ra văn bản |
create_text_file |
name, content |
Kết quả tệp văn bản đã xác nhận trong thư mục đã cấu hình |
Đọc/tải lên văn bản tối đa 64 KiB UTF-8, tên 200 ký tự, tìm tên 200,
trang liệt kê 100 tệp và phản hồi HTTP 64 KiB. Trang metadata quá lớn cần giảm
page_size. Toàn bộ object tham số tối đa 128 KiB JSON UTF-8. Google Docs
chỉ xuất văn bản; chưa có PDF, tệp nhị phân, sửa/xoá/di chuyển/chia sẻ hay tải
lên có thể tiếp tục. Nội dung tệp trả về là dữ liệu không tin cậy. Credential
đã cấu hình và access token được che trong kết quả; không trả header/lỗi thô.
Để lưu câu trả lời sinh ra, chọn create_text_file, đặt name là
report.txt, content là {{state.answer}}, và lưu output vào trường object
như created. Node read_text_file sau đó dùng {{state.created.file.id}}.
Trước khi xác nhận với người gửi, kiểm tra state.created.outcome == "confirmed"
bằng Code/Condition hiện có. Hướng dẫn Agent cũng phải yêu cầu kết quả đã
xác nhận trước khi nói tệp đã được lưu.
Kết quả tạo tệp và khôi phục¶
Studio lưu ý định trước khi gọi Google. Mỗi tệp tạo có hai appProperties
riêng: mã thao tác đã băm và checksum SHA-256 nội dung. Phản hồi đầu kiểm tra
thư mục, MIME type, marker, hash nội dung và checksum MD5 của blob do Drive
trả về. Mất/sai phản hồi hay worker dừng có thể để lại trạng thái chưa rõ.
Gọi lại cùng thao tác hoặc bấm Thao tác gần đây → Kiểm tra kết quả bên ngoài
chỉ tra cứu marker có giới hạn và đọc nội dung tệp khớp để kiểm hash đã lưu;
không tải lên lần nữa.
Không tìm thấy, nhiều kết quả, tìm chưa đầy đủ/còn trang hoặc nội dung bị đổi đều giữ trạng thái chưa rõ. Worker dừng trước upload vì thế vẫn có thể bị chặn dù chưa có tệp. Giữ thuộc tính riêng, thư mục gốc và cùng ứng dụng/ tài khoản Google để khôi phục. Thuộc tính riêng thuộc ứng dụng: đổi app OAuth hoặc tài khoản có thể làm không thấy marker. Không tạo run mới chỉ để vượt qua trạng thái chưa rõ; kiểm tra thư mục/nhà cung cấp trước. Marker/hash không bảo đảm dịch vụ bên ngoài luôn thực hiện đúng một lần. Xem thuộc tính tệp riêng của Drive và multipart upload.
Thao tác đã xác nhận dùng lại kết quả đã lưu. Run kiểm thử/model giả lập không gọi mạng, đổi token hay tạo tệp. Xuất code độc lập giữ bước managed dưới dạng TODO báo lỗi cho đến khi bạn triển khai xác thực và theo dõi thao tác bên ngoài Studio.
Fixture kiểm thử trong repository¶
Từ backend/, chạy .venv/bin/python -m pytest -q tests/test_managed_drive.py.
Từ frontend/, chạy
E2E_DRIVE_FIXTURE=1 npm run e2e -- managed-drive.spec.ts.
Fixture trình duyệt phải bật cờ rõ ràng, chỉ thay Google HTTP bằng giả lập,
dùng credential OAuth mẫu và tạo tệp trong bộ nhớ. Không phải entry point
sản xuất và không thay đổi Drive thật. Lần chạy trình duyệt thường bỏ qua
bốn biến thể này. Test backend kiểm tra service account/Shared Drive và
OAuth/My Drive, export, phạm vi truy cập, mất phản hồi, worker dừng và đối soát
chỉ đọc.