Cài đặt InnerSheet

Hai cách vào: trình cài đặt một lần nhấn (nên dùng — nó cài uv nếu cần, chạy thử server và thêm InnerSheet vào Claude Desktop và Claude Code), hoặc cách thủ công nếu bạn muốn thấy từng bước. Dù cách nào, hãy dành mười phút và một OAuth client Google Cloud miễn phí.

macOS — cách nên dùng (khoảng 10 phút)

  1. Tải InnerSheet

    Tải innersheet-mcp-v2.zip rồi nhấp đúp để giải nén. Chuyển thư mục innersheet tới chỗ cố định, ví dụ thư mục home (/Users/tenban/innersheet) — trình cài đặt ghi đường dẫn này vào cấu hình AI client, nên đừng di chuyển nó sau khi cài.

  2. Nhấp đúp install.command

    Trình cài đặt sẽ:

    • cài uv nếu máy chưa có (trình cài chính thức từ astral.sh);
    • chạy thử server bằng uv run server.py --version — lần đầu uv tải Python và các thư viện về, nên cần internet và có thể mất khoảng một phút;
    • thêm innersheet vào cấu hình Claude Desktop — file cấu hình cũ được sao lưu trước, các server khác giữ nguyên;
    • đăng ký InnerSheet với Claude Code nếu máy có CLI claude;
    • báo những việc còn lại — thường là bước Google bên dưới.

    Chạy lại nhiều lần vẫn an toàn. Nếu macOS báo file từ nhà phát triển không xác định, nhấp chuột phải vào file và chọn Open. Nếu báo không có quyền truy cập, mở Terminal trong thư mục và chạy bash install.command.

  3. Tạo OAuth client Google Cloud (một lần)

    Làm theo phần thiết lập Google Cloud bên dưới — khoảng năm phút, miễn phí. Lưu file tải về với tên client_secret.json trong thư mục innersheet.

  4. Khởi động lại và kiểm tra

    Thoát hẳn Claude Desktop (⌘Q, không chỉ đóng cửa sổ) rồi mở lại, sau đó hỏi: "List my spreadsheets" (liệt kê các bảng tính của tôi). Lần đầu, trình duyệt sẽ mở trang đăng nhập Google.

Windows — cách nên dùng (khoảng 10 phút)

  1. Tải InnerSheet

    Tải innersheet-mcp-v2.zip, nhấp chuột phải và chọn Extract All. Chuyển thư mục innersheet tới chỗ cố định, ví dụ C:\innersheet, trước khi chạy trình cài đặt.

  2. Chạy install.ps1

    Nhấp chuột phải install.ps1 và chọn Run with PowerShell. Nó làm giống bản macOS: cài uv nếu thiếu, chạy thử server, thêm InnerSheet vào %APPDATA%\Claude\claude_desktop_config.json (sau khi sao lưu), và đăng ký với Claude Code nếu có CLI.

    Nếu Windows báo không cho chạy script, mở PowerShell trong thư mục và chạy lệnh này — chỉ áp dụng cho lần chạy này:

    powershell -ExecutionPolicy Bypass -File install.ps1
  3. Tạo OAuth client Google Cloud (một lần)

    Làm theo phần thiết lập Google Cloud bên dưới và lưu file tải về với tên client_secret.json trong thư mục innersheet.

  4. Khởi động lại và kiểm tra

    Thoát Claude Desktop từ khay hệ thống (không chỉ đóng cửa sổ), mở lại rồi hỏi: "List my spreadsheets".

Linux — cách nên dùng (khoảng 10 phút)

  1. Tải InnerSheet

    Tải innersheet-mcp-v2.zip và giải nén vào một thư mục cố định, ví dụ ~/innersheet.

  2. Chạy bash install.sh

    Chạy trong thư mục đó. Nó cài uv nếu thiếu, chạy thử server và đăng ký với Claude Code nếu có CLI. Linux không có đường dẫn cấu hình Claude Desktop chuẩn, nên thay vì sửa file, nó in ra đoạn cấu hình để bạn dán vào client (Cursor, Windsurf, Zed…).

    Trên máy headless, đăng nhập Google một lần trên máy desktop rồi chép ~/.config/innersheet/token.json sang.

  3. Tạo OAuth client Google Cloud (một lần)

    Làm theo phần thiết lập Google Cloud bên dưới và lưu file tải về với tên client_secret.json trong thư mục innersheet.

  4. Khởi động lại và kiểm tra

    Khởi động lại AI client và hỏi: "List my spreadsheets".

Trình cài đặt thêm gì vào cấu hình

Đây là mục trình cài đặt gộp vào mcpServers (trên Linux thì in ra). uv run đọc danh sách thư viện khai báo ngay trong server.py, nên không có môi trường ảo nào phải tự quản lý.

{
  "mcpServers": {
    "innersheet": {
      "command": "uv",
      "args": ["run", "/path/to/innersheet/server.py"],
      "env": {
        "GOOGLE_OAUTH_CLIENT_SECRETS": "/path/to/innersheet/client_secret.json"
      }
    }
  }
}

Client báo không tìm thấy uv? App desktop mở từ Dock hay menu Start không phải lúc nào cũng thấy cùng PATH với terminal. Thay "uv" bằng đường dẫn đầy đủ — chạy which uv (macOS/Linux) hoặc where uv (Windows) để lấy. Xem spawn uv ENOENT.

Thiết lập Google Cloud — bước ai cũng làm một lần

InnerSheet đăng nhập Google Sheets bằng chính tài khoản của bạn, nên Google cần biết ứng dụng này tồn tại. Miễn phí, không cần thẻ tín dụng. Lần đầu hãy dành khoảng năm phút.

Console bản mới gom phần OAuth vào Google Auth Platform (các tab Branding, Audience, Clients); bản cũ gọi là OAuth consent screen. Bên dưới ghi cả hai tên.

  1. Tạo một project

    Vào console.cloud.google.com, đăng nhập bằng tài khoản Google sở hữu các sheet, và tạo project mới. Tên nào cũng được — innersheet là ổn.

  2. Bật hai API

    Mở APIs & Services → Library và bật Google Sheets API và Google Drive API. Drive chỉ dùng để tìm bảng tính theo tên. Bỏ qua bước này sẽ gặp lỗi "API has not been used in project".

  3. Cấu hình màn hình đồng ý

    Mở Google Auth Platform → Branding (bản cũ: APIs & Services → OAuth consent screen). Đặt tên ứng dụng (InnerSheet) và email của bạn, chọn đối tượng External, rồi lưu. Dùng cá nhân thì không cần logo hay chính sách riêng tư.

  4. Chọn ai được đăng nhập: publish, hoặc thêm mình làm test user

    Ứng dụng mới luôn ở trạng thái Testing. Mở Audience và chọn một trong hai:

    Lựa chọnCách làmĐánh đổi
    Publish ứng dụng Nên dùngAudience → Publish app → xác nhận In production.Đăng nhập giữ được lâu dài. Bạn sẽ thấy màn “Google hasn't verified this app” một lần — bình thường với project cá nhân, không cần xác minh.
    Giữ ở TestingAudience → Test users → Add users → thêm Gmail bạn sẽ dùng để đăng nhập.Google làm hết hạn đăng nhập sau mỗi 7 ngày, nên tuần nào cũng phải đăng nhập lại.

    Không làm cái nào sẽ gặp Error 403: access_denied. Giữ ở Testing là lý do của lỗi invalid_grant hằng tuần.

  5. Tạo OAuth client loại Desktop

    Mở Google Auth Platform → Clients → Create client (bản cũ: Credentials → Create Credentials → OAuth client ID). Chọn loại Desktop app — không chọn “Web application”, vì sẽ gây lỗi redirect_uri_mismatch. Tải file JSON về.

  6. Lưu file cạnh server

    Đổi tên file thành client_secret.json và đặt trong thư mục innersheet — đúng đường dẫn trình cài đặt đã cấu hình. Đừng commit lên git hay chia sẻ; file đã nằm trong .gitignore kèm theo.

  7. Chạy lần đầu: đăng nhập một lần

    Lần đầu một công cụ chạy, trình duyệt mở trang đăng nhập Google. Đăng nhập và chấp nhận quyền. Token được lưu tại ~/.config/innersheet/token.json và tự làm mới.

    Gặp “Google hasn't verified this app”? Bình thường với project bạn tự tạo: nhấn Advanced, rồi Go to InnerSheet (unsafe).

Muốn dùng service account? Tạo trong IAM & Admin → Service Accounts, tải key về, chia sẻ từng sheet với email của service account ở quyền Editor, rồi đặt SHEETS_MCP_AUTH=service_account và GOOGLE_SERVICE_ACCOUNT_JSON=/đường/dẫn/key.json. Hợp với server và sheet dùng chung của nhóm — không cần đăng nhập qua trình duyệt, token không hết hạn.

Bảng cấu hình

InnerSheet được cấu hình bằng biến môi trường. Đặt chúng trong khối env của cấu hình client (hoặc -e KEY=value với claude mcp add), rồi khởi động lại client.

BiếnMặc địnhTác dụng
GOOGLE_OAUTH_CLIENT_SECRETSTrình cài đặt đặt sẵnĐường dẫn tới file JSON của OAuth client (Desktop app). Bắt buộc ở chế độ OAuth.
SHEETS_MCP_AUTHoauthoauth (đăng nhập qua trình duyệt) hoặc service_account.
GOOGLE_SERVICE_ACCOUNT_JSON—Đường dẫn tới file key của service account, hoặc chính nội dung JSON. Bắt buộc khi SHEETS_MCP_AUTH=service_account.
SHEETS_MCP_TOKEN_PATH~/.config/innersheet/token.jsonNơi lưu token OAuth. Xóa file này để đăng nhập lại.
SHEETS_MCP_ALLOWED_SPREADSHEETSTrống — cho phép tất cảDanh sách ID bảng tính, cách nhau bằng dấu phẩy. Mọi bảng tính khác bị từ chối trước khi gọi Google.
SHEETS_MCP_READ_ONLYTắt1, true hoặc yes chặn mọi thao tác ghi và chỉ xin quyền đọc từ Google.
SHEETS_MCP_MAX_READ_CELLS5000Lần đọc lớn hơn bị cắt bớt, kèm ghi chú nhắc AI thu hẹp vùng.
SHEETS_MCP_MAX_WRITE_CELLS10000Một lần ghi lớn hơn bị từ chối — hãy chia thành nhiều batch.
SHEETS_MCP_API_KEY—Bắt buộc ở chế độ HTTP. Client phải gửi Authorization: Bearer <key>.

Tham số dòng lệnh

Tham sốMặc địnhTác dụng
--version—In phiên bản rồi thoát — cách kiểm tra nhanh server còn chạy được.
--transportstdiostdio cho client local, http cho web chat (Streamable HTTP tại /mcp).
--host127.0.0.1Địa chỉ lắng nghe của chế độ HTTP.
--port8000Cổng của chế độ HTTP.

Ví dụ: chỉ đọc, chỉ hai bảng tính

"env": {
  "GOOGLE_OAUTH_CLIENT_SECRETS": "/path/to/innersheet/client_secret.json",
  "SHEETS_MCP_READ_ONLY": "1",
  "SHEETS_MCP_ALLOWED_SPREADSHEETS": "1AbCdEfGhIjK,1ZyXwVuTsRqP"
}

ID bảng tính là phần trong URL nằm giữa /d/ và /edit. Sau khi bật hoặc tắt chế độ chỉ đọc, hãy xóa token.json một lần để Google cấp token với quyền tương ứng.

Cài thủ công (không dùng trình cài đặt)

Nếu bạn muốn thấy từng bước, cách thủ công rất ngắn. Bạn cần Python 3.10 trở lên.

# macOS / Linux
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

# Windows (PowerShell)
py -3 -m venv .venv
.venv\Scripts\pip install -r requirements.txt
Bạn cài bằng…Cấu hình client dùng
Trình cài đặt (hoặc uv)"command": "uv", "args": ["run", "/path/to/innersheet/server.py"]
Venv thủ công — macOS/Linux"command": "/path/to/innersheet/.venv/bin/python", "args": ["/path/to/innersheet/server.py"]
Venv thủ công — Windows"command": "C:\\innersheet\\.venv\\Scripts\\python.exe" — dấu gạch chéo ngược phải nhân đôi trong JSON

File cấu hình cho từng client có ở trang AI Clients.

Kiểm tra kết nối

Sau khi khởi động lại AI client, chạy lần lượt các kiểm tra này. Dừng ở bước đầu tiên bị lỗi và tra lỗi đó ở trang Xử lý lỗi.

InnerSheet chạy thật trong terminal: lệnh kiểm tra phiên bản in ra innersheet 2.0.0 rồi MCP server khởi động với transport stdio
Server chạy thật — kiểm tra phiên bản, rồi MCP server khởi động trên stdio.
  1. Trong terminal: uv run /path/to/innersheet/server.py --version phải in ra innersheet 2.0.0. Nếu không, lỗi nằm ở bước cài chứ không phải ở client.
  2. "List my spreadsheets" — AI phải trả lời bằng tên các sheet thật. Nếu không tìm thấy gì, bước đăng nhập Google chưa xong.
  3. "Read A1:D10 from <tên sheet>" — kiểm tra giá trị khớp với những gì bạn thấy trên trình duyệt.
  4. "Upsert today's row in my daily report, dry run only" — AI phải mô tả những gì nó sẽ ghi, mà không ghi gì cả.

Khi có lỗi, xem ở đâu

  • Log của Claude Desktop: ~/Library/Logs/Claude/ (macOS) hoặc %APPDATA%\Claude\logs\ (Windows) — mở mcp-server-innersheet.log.
  • Claude Code: claude mcp list cho biết InnerSheet đã kết nối chưa.
  • Nguyên văn thông báo lỗi — rồi tìm nó ở trang Xử lý lỗi.