AI & AUTOMATION

Chat On Steroids: Kiến trúc MCP cục bộ, cài đặt và bảo mật

Tóm tắt nhanh:
Chat On Steroids là ứng dụng desktop Electron mã nguồn mở (giấy phép MIT) kết nối ChatGPT với máy trạm qua Model Context Protocol (MCP). Công cụ tệp giới hạn nghiêm ngặt theo danh sách thư mục được duyệt, nhưng lệnh shell chạy với toàn bộ quyền người dùng hệ điều hành mà không có sandbox bảo vệ, khiến việc cách ly môi trường trong máy ảo hoặc container được khuyến nghị mạnh mẽ khi kiểm tra mã nguồn lạ.

Nhiều kỹ sư muốn dùng LLM trên mã nguồn nội bộ mà không cần tải dự án lên đám mây. Chat On Steroids là ứng dụng desktop Electron TypeScript kết nối ChatGPT với máy trạm qua MCP. Để triển khai an toàn, cần nắm rõ định tuyến hai luồng, phạm vi thư mục cho phép và rủi ro thực thi shell.

Kiến trúc mạng hai luồng và cơ chế định tuyến qua reverse tunnel

Theo setup.md L9-L56, Chat On Steroids phân tách đường truyền mạng thành hai kênh độc lập: máy chủ Core MCP phục vụ gọi công cụ qua reverse tunnel và cầu nối WebSocket nội bộ dành riêng cho tiện ích Chrome companion.

+-----------------------------------------------------------------+
|                        Máy trạm phát triển                      |
|                                                                 |
|   +-----------------------+           +---------------------+   |
|   |  Tiện ích Chrome      |           |  Chat On Steroids   |   |
|   |  (Giao diện ChatGPT)  |           |  Ứng dụng Electron  |   |
|   +-----------+-----------+           +----------+----------+   |
|               |                                  |              |
|       WebSocket (8765-8769)                      |              |
|               +----------------------------------+              |
|                                                  |              |
|                                      HTTP (127.0.0.1:0)         |
|                                                  |              |
+--------------------------------------------------|--------------+
                                                   |
                                      Đường hầm mã hóa (Tunnel)
                       (Cloudflare Quick Tunnel / OpenAI Secure Tunnel)
                                                   |
                                       +-----------+-----------+
                                       | Máy chủ đám mây       |
                                       | (Mô hình OpenAI)      |
                                       +-----------------------+

Vòng lặp máy chủ Core MCP và cấp phát cổng động

Kênh chính xử lý công cụ từ mô hình. Theo server.ts L470-L493, Core MCP lắng nghe trên loopback với cổng động (server.listen(0, '127.0.0.1')), tránh xung đột phiên. Theo server.ts L469-L473, giới hạn 30 giây nhận tiêu đề và 300 giây nhận yêu cầu giúp chặn request quá chậm. Riêng biệt, cơ chế kiểm soát áp dụng giới hạn 8 MB (MAX_BODY_BYTES) theo server.ts L31. Khi kích thước vượt ngưỡng, server.ts L417-L451 từ chối yêu cầu bằng mã lỗi 413.

Khi khởi động, theo server.ts L263-L277, ứng dụng tạo khóa bí mật 32 byte qua randomBytes(32). Do máy chủ đám mây không thể gọi trực tiếp loopback, hệ thống dùng đường hầm HTTPS đảo ngược—như OpenAI Secure MCP tunnel (tunnel ID và key giới hạn), Cloudflare quick tunnel (URL kèm token bí mật) hoặc HTTPS tunnel riêng—theo setup.md L9-L55. Đường hầm chuyển tiếp lệnh JSON-RPC từ internet vào cổng loopback nội bộ. Về mặt vận hành, lập trình viên có thể cân nhắc thêm proxy nội bộ khi xử lý mạng hạn chế, dù dự án chỉ kiểm thử các đường hầm tích hợp trên.

Cầu nối WebSocket cho tiện ích trình duyệt trên dải cổng 8765–8769

Tách biệt khỏi luồng MCP, ứng dụng duy trì máy chủ WebSocket trên dải cổng 8765–8769. Theo setup.md L41-L56, cầu nối tự động liên kết với cổng trống đầu tiên hoặc theo biến CLF_BRIDGE_PORTS.

Cầu nối đồng bộ phiên làm việc, token và trạng thái lên ChatGPT, không mở API tệp hay shell. Nếu cổng lưu bị chiếm khi khởi động, ứng dụng dừng cầu nối và báo lỗi trong Setup thay vì tự đổi cổng.

Quy trình cài đặt và thiết lập môi trường phát triển cục bộ

Môi trường phát triển yêu cầu Node.js 22 trở lên theo CONTRIBUTING.md L17. Core và tiện ích dùng npm tiêu chuẩn; riêng desktop helper cần thêm công cụ native như Xcode trên macOS.

Khởi chạy từ mã nguồn

Kỹ sư có thể tải mã nguồn, cài đặt phụ thuộc và khởi chạy:

# Tải mã nguồn về máy trạm
git clone https://github.com/totec448-spec/chat-on-steroids.git
cd chat-on-steroids

# Cài đặt phụ thuộc đã ghim phiên bản
npm ci

# Khởi chạy ứng dụng Electron ở chế độ dev
npm run dev

# Chạy kiểm thử tự động và kiểm tra kiểu
npm run verify

Theo package.json L9-L40, lệnh npm run dev kích hoạt Vite cho giao diện và nạp tiến trình chính Electron. Tập lệnh npm run verify chạy kiểm tra kiểu tsc --noEmit, kiểm tra quyền riêng tư và bộ kiểm thử Vitest.

Cấu hình thư mục làm việc và kết nối tunnel

Khi cửa sổ ứng dụng khởi động, kỹ sư thiết lập theo ba bước chuẩn xác từ setup.md L9-L16:

  1. Duyệt thư mục dự án: Mở Settings → Workspace để phê duyệt thư mục dự án và xem xét các quyền công cụ. Công cụ tệp (read, write, list_directory) sẽ từ chối truy cập ngoài các thư mục này.
  2. Kích hoạt reverse tunnel: Theo setup.md L9-L16, chuyển sang thẻ Settings → Setup, chọn nhà cung cấp tunnel và nhấn Connect. Trên ChatGPT, thêm ứng dụng Core tại Plugins → Add → Create MCP App với URL hiển thị.
  3. Ghép nối tiện ích Chrome companion: Nhấn nút Open extension folder trên giao diện ứng dụng. Trong Chrome, mở chrome://extensions, bật Developer mode, chọn Load unpacked và chỉ định thư mục này. Theo setup.md L41-L56, kết nối tự động thiết lập qua cổng cầu nối đã cấu hình, mặc định chọn cổng trống đầu tiên trong dải 8765–8769.

Để đóng gói ứng dụng native cho từng nền tảng:

npm run dist:mac:arm64    # Dành cho macOS Apple silicon
npm run dist:linux:x64    # Dành cho Linux x64
npm run dist:x64          # Dành cho Windows x64

Ranh giới an toàn: Danh sách thư mục cho phép và đặc quyền thực thi lệnh

Mô hình bảo mật của Chat On Steroids phân biệt rõ giữa kiểm soát tệp và thực thi lệnh hệ thống.

Thành phầnPhạm vi quyền hạnCơ chế kiểm soátMức độ rủi ro
Thao tác tệp (read, write, list_directory)Giới hạn trong thư mục dự án đã duyệtChuẩn hóa đường dẫn ở tầng ứng dụngCó kiểm soát; ngăn chặn duyệt thư mục ngoài
Thực thi lệnh (exec_command)Toàn bộ quyền của user hệ điều hànhTiến trình con độc lập không có sandboxRất cao; kế thừa đầy đủ quyền hạn người dùng
Điều khiển màn hình (Desktop tools)Toàn bộ giao diện chuột, phím, clipboardQuyền trợ năng và quay màn hình OSNhạy cảm; can thiệp trực tiếp vào màn hình
Cầu nối trình duyệt (Companion WebSocket)Đồng bộ ngữ cảnh phiên làm việcCổng loopback 8765–8769Tối thiểu; không chứa API thao tác hệ thống

Chuẩn hóa đường dẫn tệp tin và tiến trình con không có sandbox

Theo sandbox.ts L7-L24 và SECURITY.md L18-L43, công cụ tệp xác thực đường dẫn dựa trên thư mục dự án đã duyệt, dùng kiểm tra realpath chuẩn tắc để ngăn vượt rào qua liên kết tượng trưng.

Trái lại, công cụ exec_command đặt thư mục làm việc tại gốc dự án nhưng tiến trình con thừa hưởng toàn bộ quyền của tài khoản người dùng hệ thống. Theo command-allowlist.ts L105-L115, chính sách lệnh từ chối khi xuất hiện toán tử như đường ống (|), chuyển hướng (>), nối lệnh (&&, ;) hay chèn lệnh con ($()).

Tiến trình con không có sandbox, có thể đọc tệp cá nhân hoặc kết nối mạng. Khi chạy mã nguồn lạ, kỹ sư nên dùng máy ảo hoặc container độc lập.

Vai trò của Tree-sitter bash khi chặn lệnh vá mã nguồn

Mã nguồn tools-core.ts L794-L826 dùng ngữ pháp tree-sitter-bash để nhận dạng lệnh vá mã nguồn (apply_patch).

Khi phát hiện cú pháp hợp lệ (như heredoc hoặc cd <path> && apply_patch), ứng dụng chặn lệnh, giải mã diff và áp dụng trực tiếp qua API tệp nội bộ, tránh tạo tiến trình shell thừa nhưng không kiểm duyệt các lệnh khác.

Quản lý phiên làm việc tự trị và khắc phục sự cố vận hành

Nhằm duy trì ngữ cảnh cho tác vụ dài hạn, Chat On Steroids cung cấp cơ chế thu gọn ngữ cảnh và điều phối tự động.

  • Cơ chế Compact and Resume: Theo setup.md L75, khi phiên làm việc chạm ngưỡng token, ứng dụng tóm tắt lịch sử thành tài liệu Markdown khoảng 2.000 đến 6.000 token, rồi chuyển giao sang phiên trò chuyện mới. Quá trình thu gọn tự động dựa trên ước tính cục bộ; các mô hình suy luận Pro không áp dụng thu gọn tự động.
  • Worker song song: Theo setup.md L77, mặc định 2 worker đồng thời cho mỗi nhóm mô hình, cấu hình tối đa 8 worker.
  • Chế độ chỉ đọc (Read-only): Theo config.ts L661-L677, bật chế độ này sẽ ghi đè và tắt toàn bộ quyền ghi tệp, thực thi shell, trả về lỗi TOOL_DISABLED.

Xử lý các tình huống lỗi thường gặp

Trong quá trình sử dụng, lập trình viên có thể gặp các tình huống vận hành phổ biến trong setup.md L41-L97:

  1. Lỗi TOOL_DISABLED: Nếu mô hình báo lỗi TOOL_DISABLED, kiểm tra xem Read-only mode có đang bật trên thanh trạng thái hoặc tính năng cục bộ bị tắt trong cài đặt.
  2. Xung đột cổng cầu nối trình duyệt: Nếu ứng dụng khởi động nhưng cầu nối báo dừng kèm lỗi trong Setup, cổng đã lưu đang bị chiếm giữ. Bạn có thể chọn cổng khác hoặc Auto trong Settings → Browser & history. Để xác định tiến trình giữ cổng, bạn có thể kiểm tra trên dải cổng bằng lsof -iTCP:8765-8769 -sTCP:LISTEN (hoặc cổng cụ thể đã cấu hình) trên macOS/Linux.
  3. Lỗi lưu khóa xác thực trên Linux: Theo setup.md L86-L97, khóa API và token yêu cầu Secret Service (GNOME Keyring hoặc KWallet). Hãy mở khóa keyring trước khi khởi động ứng dụng để tránh lỗi từ chối lưu mật khẩu.

Chat On Steroids mở rộng sức mạnh ChatGPT qua MCP. Nắm vững ranh giới bảo mật và cấu hình giúp khai thác tối đa công cụ mà vẫn đảm bảo an toàn hệ thống.

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất