·

Google Sheets MCP Là Gì?

Tìm hiểu Google Sheets MCP là gì và cách nó giúp AI agent đọc và ghi dữ liệu bảng tính.

Google Sheets là nơi 80% dữ liệu vận hành thực tế của một team sống — từ bảng theo dõi bug, danh sách khách hàng, đến báo cáo doanh số hằng tuần. Vấn đề là dữ liệu đó gần như luôn ở dạng thô: cột thiếu tiêu đề, ô trống lẫn với dữ liệu thật, công thức copy-paste sai lệch. Google Sheets MCP (Model Context Protocol) là lớp kết nối cho phép AI agent — Claude Code, Gemini CLI, Cursor, OpenCode — đọc, phân tích và viết lại dữ liệu đó trực tiếp trên spreadsheet thật, thay vì bạn phải export CSV rồi paste vào chat. Bài này đi qua kiến trúc, các tool cốt lõi, mô hình auth, và ranh giới an toàn bạn cần thiết lập trước khi cho một agent "cầm bút" ghi vào sheet sản xuất.

Core Google Sheets MCP Tools (Bộ Tool Cốt Lõi): Read Range, Write Range, Sheets, và Formulas

Không giống Slack hay GitHub — nơi có một server MCP chính thức do Anthropic hoặc chính nền tảng đó duy trì — hệ sinh thái Google Sheets MCP khá phân mảnh. Không có "Google Sheets MCP server" chuẩn duy nhất; thay vào đó là một nhóm implementation cộng đồng và vendor (ví dụ server Python phổ biến kiểu mcp-google-sheets, các bản fork trên GitHub, và tùy chọn hosted như Zapier hay Composio), mỗi bên bọc Google Sheets API v4 với một bộ tool hơi khác nhau. Trước khi chuẩn hóa workflow team trên một server cụ thể, bạn cần biết chính xác server đang chạy là bản nào — vì tên tool, scope OAuth yêu cầu, và cách xử lý range có thể khác nhau đáng kể.

Dù implementation khác nhau, bộ tool cốt lõi mà agent thực sự dùng gần như luôn xoay quanh bốn nhóm sau:

  • Read range — đọc một vùng ô theo A1 notation (Sheet1!A1:F50) hoặc theo tên sheet, trả về giá trị dạng 2D array. Đây là tool agent gọi nhiều nhất — mọi câu hỏi phân tích dữ liệu đều bắt đầu bằng một lệnh đọc.
  • Write range — ghi giá trị vào một vùng ô cụ thể, thường có tùy chọn valueInputOptionRAW (ghi nguyên văn) hoặc USER_ENTERED (Google Sheets tự parse như khi bạn gõ tay — công thức, ngày tháng, số sẽ được nhận diện đúng kiểu).
  • List/manage sheets — liệt kê các tab (sheet) trong một spreadsheet, tạo tab mới, đổi tên, hoặc xóa. Cần khi agent phải tạo báo cáo trong một tab riêng thay vì ghi đè dữ liệu gốc.
  • Formulas & batch update — một số server expose riêng khả năng ghi công thức (=SUM(...), =QUERY(...)) hoặc batch update nhiều range trong một request để giảm số lần gọi API và tránh rate limit.

Mẹo: Trước khi giao việc cho agent, tự chạy thử tool read_range trên chính spreadsheet đó qua CLI của server (không qua AI agent) để xác nhận format dữ liệu trả về — nhiều bản fork trả null cho ô trống theo cách khác nhau (chuỗi rỗng, None, hoặc bỏ hẳn phần tử khỏi array), và điều này ảnh hưởng trực tiếp đến logic phân tích mà agent viết sau đó.

Xác Thực (Authentication) Google Sheets MCP: OAuth Scope và Chia Sẻ Sheet

Có hai mô hình xác thực chính, và chọn sai mô hình là nguyên nhân phổ biến nhất khiến một demo chạy tốt trên máy cá nhân nhưng "vỡ" khi đưa cho team dùng chung.

OAuth 2.0 user consent — agent hành động như chính bạn. Bạn tạo OAuth client trong Google Cloud Console (APIs & Services → Credentials → OAuth client ID → Desktop app), bật Google Sheets API (và thường cả Google Drive API, vì hầu hết server cần Drive API để tìm spreadsheet theo tên hoặc list file), rồi chạy flow consent một lần để lấy refresh token. Đây là lựa chọn hợp lý cho việc cá nhân dùng agent để phân tích các sheet mà chính bạn có quyền truy cập.

Service account — agent hành động như một "user robot" riêng, không gắn với tài khoản cá nhân ai cả. Bạn tạo service account trong Cloud Console, download file JSON key, rồi chia sẻ (share) từng spreadsheet cụ thể với email của service account (dạng xxx@project-id.iam.gserviceaccount.com) như chia sẻ với một người dùng thật. Đây là lựa chọn đúng cho workflow chạy tự động, không người canh — CI job tổng hợp báo cáo hằng đêm, hay agent chạy theo schedule.

Scope cần quan tâm:

https://www.googleapis.com/auth/spreadsheets       # đọc + ghi Sheets
https://www.googleapis.com/auth/spreadsheets.readonly  # chỉ đọc — ưu tiên khi có thể
https://www.googleapis.com/auth/drive.metadata.readonly # để tìm spreadsheet theo tên

Một điểm dễ bị bỏ qua: service account không tự nhiên thấy được spreadsheet nào cả, kể cả khi nó nằm trong tổ chức Google Workspace của bạn — nó chỉ thấy những file được share trực tiếp với nó. Điều này thực ra là một lớp an toàn tốt: bạn kiểm soát chính xác agent được đọc/ghi sheet nào bằng cách share hoặc unshare, không cần đụng đến code hay config.

Mẹo: Với workflow tự động hóa dùng chung cho cả team, luôn dùng service account scoped theo từng sheet cụ thể, không dùng OAuth cá nhân của bạn. Khi bạn đổi máy, đổi mật khẩu, hay nghỉ phép, workflow chạy bằng service account vẫn sống — workflow chạy bằng OAuth cá nhân sẽ chết theo session của bạn.

AI Có Thể Tự Động Hóa Gì: Làm Sạch Dữ Liệu, Phân Tích, và Sinh Báo Cáo

Với read/write range trong tay, agent thực sự có giá trị ở ba nhóm việc:

Làm sạch dữ liệu (data cleaning). Chuẩn hóa định dạng ngày ("3/4" có thể là 3 tháng 4 hoặc 4 tháng 3 tùy locale — agent cần được nhắc rõ locale), gộp các biến thể chính tả của cùng một giá trị ("Hà Nội", "ha noi", "HN" → chuẩn hóa về một giá trị), phát hiện dòng trùng, và điền giá trị thiếu theo quy tắc bạn chỉ định (không tự đoán bừa).

Phân tích (analysis). Tính tổng hợp theo nhóm, phát hiện outlier, so sánh kỳ này với kỳ trước — những việc mà trước đây bạn phải viết pivot table hoặc công thức QUERY phức tạp, giờ diễn đạt bằng ngôn ngữ tự nhiên và agent tự sinh logic tính toán (thường là Python tạm thời để xử lý, sau đó ghi kết quả cuối vào sheet).

Sinh báo cáo (report generation). Từ dữ liệu thô, agent viết ra một tab tóm tắt, hoặc một đoạn văn bản mô tả insight, sẵn sàng gửi cho stakeholder. Đây là nơi giá trị thực sự lớn nhất — không phải vì AI tính toán nhanh hơn Excel, mà vì nó rút gọn được khoảng cách giữa "có dữ liệu" và "có câu chuyện để kể" từ dữ liệu đó.

Ví dụ prompt thực tế cho Claude Code sau khi đã kết nối MCP:

Đọc range Sales!A1:F500 trong spreadsheet "Q3-Sales-Raw".
Cột D là ngày ở định dạng dd/mm/yyyy. Tính tổng doanh thu (cột E) theo tháng,
loại các dòng có cột F ghi "cancelled" hoặc "refunded".
Ghi kết quả vào tab mới tên "Monthly-Summary", cột A là tháng, cột B là tổng.
Không sửa gì trên tab Sales gốc.

Mẹo: Luôn chỉ định rõ định dạng ngày và các giá trị cần loại trừ trong prompt — đừng để agent tự suy đoán "cancelled" nghĩa là gì hay ngày ghi theo chuẩn nào. Một câu mơ hồ ở đây có thể lệch cả bảng tổng hợp mà bạn không phát hiện ra ngay.

Tránh Ghi Đè Phá Hủy Dữ Liệu và Bảo Toàn Công Thức

Đây là phần dễ gây thiệt hại thật nhất trong cả module, vì write range không có undo tự động ở cấp API — Google Sheets có version history, nhưng agent không tự động biết cách rollback, và không phải ai cũng nhớ mở "Xem lịch sử phiên bản" (File → Version history) kịp lúc.

Ba nguyên tắc bắt buộc:

  1. Không bao giờ để agent ghi đè toàn bộ sheet gốc theo mặc định. Luôn yêu cầu agent ghi kết quả vào một tab mới, hoặc một vùng cột trống rõ ràng bên cạnh dữ liệu gốc, trừ khi bạn chủ động xác nhận ghi đè.
  2. Cẩn trọng với valueInputOption: RAW khi range đích có công thức. Ghi RAW vào một ô đang chứa =SUM(B2:B10) sẽ xóa công thức đó và thay bằng giá trị tĩnh — không thể phục hồi công thức chỉ bằng cách đọc lại giá trị.
  3. Luôn backup trước khi chạy write ở quy mô lớn. Cách đơn giản nhất: yêu cầu agent trước tiên gọi Google Drive API để copy toàn bộ spreadsheet (Tệp → Tạo bản sao), rồi thao tác trên bản sao đó để review trước khi áp dụng lên bản gốc.

Ví dụ chỉ dẫn an toàn để đặt vào system prompt hoặc file rule của agent (ví dụ CLAUDE.md hay tương đương):

Quy tắc bắt buộc khi thao tác Google Sheets MCP:
- Không ghi (write_range) vào tab có tên kết thúc bằng "-raw" hoặc "-source".
- Luôn ghi kết quả phân tích vào tab mới, đặt tên theo mẫu "<tab-gốc>-summary-<ngày>".
- Trước khi ghi hơn 50 ô, liệt kê rõ range sẽ ghi và giá trị mẫu, chờ tôi xác nhận.

Mẹo: Thiết lập rule "luôn hỏi xác nhận trước khi ghi quá N ô" ngay từ đầu, dù N nhỏ (ví dụ 20). Chi phí hỏi thêm một câu rẻ hơn rất nhiều so với chi phí khôi phục một sheet đã bị ghi sai vào giữa giờ làm.

Tips

Tổng hợp lại các điểm agent-vận-hành cần nhớ khi làm việc với Google Sheets MCP, bất kể bạn dùng client nào ở các bài tiếp theo (Claude Code, OpenCode, Gemini CLI, hay Cursor):

  • Xác định rõ implementation server bạn dùng và đọc kỹ tên tool thực tế của nó — đừng giả định tên tool giống hệt ví dụ trong tài liệu chung.
  • Dùng service account cho mọi workflow tự động, chỉ share đúng những spreadsheet cần thiết — không share cả Drive.
  • Luôn phân tách rõ tab nguồn (chỉ đọc) và tab kết quả (agent được ghi).
  • Kiểm tra valueInputOption mỗi khi có công thức trong vùng ghi.

Mẹo: Ghi lại một checklist ngắn (dạng file markdown trong repo) mô tả: server nào đang dùng, scope OAuth nào được cấp, và những tab nào agent được phép ghi. Checklist này tiết kiệm rất nhiều thời gian debug khi có người mới join team hoặc khi bạn tự quay lại project sau vài tháng.