v3.0.1

Aki MCP Server 3.0: bộ tool vừa với máy bạn, mỗi lệnh gọi đều truy lại được

Aki MCP Server giờ chỉ phục vụ tool của những app bạn đã cài (tối đa 38 tool), bắt AI trình rule receipt trước khi bất kỳ tool ghi nào được chạy, giữ thông tin xác thực ngoài kết quả tool, và ghi nhật ký mọi lệnh gọi mà không lưu nội dung bạn gửi. Từ 2.2 đây là bản major: cập nhật, khởi động lại, rồi kết nối lại AkiMCP trong mọi client. Từ 3.0.0, chỉ cần cập nhật và khởi động lại: không phải kết nối lại.

  • 38

    tool, chỉ cho app đã cài

    Tool của app chưa cài không được phục vụ. Mục 8 bật tắt phần còn lại

  • 17

    tool được đánh dấu chỉ-đọc

    Trên tổng 38. ChatGPT thôi hỏi xác nhận chúng, tool nào ghi được vẫn hỏi

  • 50

    giây tối đa cho mỗi lệnh trình duyệt

    Kể cả khi trang không phản hồi. Hết giờ sẽ có mã timeout và bước tiếp theo

  • 4

    AI web kết nối bằng passphrase

    Claude, ChatGPT, Grok và nay có Notion. Gemini vẫn là thử nghiệm

Bản vá 3.0.1: lỗi không còn lan ra, bộ chặn đếm đúng người gọi

Đang dùng 3.0.0? Cập nhật bằng đúng lệnh cũ (Cách nâng cấp) rồi khởi động lại AkiMCP: các bản sửa chỉ có hiệu lực sau khi khởi động lại. Không cần kết nối lại client, vì danh sách tool AI nhìn thấy vẫn như 3.0.0. AI còn giữ rule receipt cũ sẽ được yêu cầu lấy receipt mới một lần.

Đã sửa

Task không khởi động được không còn làm sập server

Task nền chạy bằng task_start trong thư mục không tồn tại, hoặc với chương trình bị thiếu hay không chạy được, từng làm cả tiến trình AkiMCP thoát, và mọi client đang kết nối mất tool cho tới khi bạn khởi động lại. Lệnh gọi giờ báo lỗi kèm lý do, ví dụ Failed to spawn background task process: ENOENT, còn server vẫn chạy.

Đã sửa

Postman không mở được thì báo lỗi ngay

Bấm khởi chạy Postman ở tab Postman của panel khi file chạy Postman bị thiếu hoặc không chạy được từng làm tiến trình trợ giúp Postman thoát, và một lần khởi chạy thất bại phải đợi hết thời gian chờ sẵn sàng mới báo lỗi. Giờ nó báo ngay kèm lý do, ví dụ Failed to launch Postman: EACCES.

Đã sửa

Hết giờ trước khi chạm tới trang thì báo đúng như vậy

Khi devtools_eval hết giờ lúc còn đang liệt kê tab hoặc kết nối, nó từng báo là script có thể đã chạy, dù chưa có gì chạy. Giờ nó báo CDP endpoint không phản hồi và nhắc kiểm tra ứng dụng bằng aki__port_status. Khi đã kết nối, tab bị treo vẫn nhận thông báo cũ, vì lúc đó script có thể đã chạy.

Bảo mật

Trên Tailscale Funnel, client không còn tự chọn danh tính cho bộ chặn

Việc chặn sau nhiều lần sai thông tin xác thực và giới hạn gọi /register hàng loạt đều đếm theo từng người gọi. Ở 2.2.0 và 3.0.0, người gọi được xác định từ CF-Connecting-IP trên mọi ingress, nhưng chỉ Cloudflare mới ghi header này, nên trên Funnel một client có thể tự gửi giá trị riêng để né việc chặn. Giờ mỗi ingress chỉ đọc header do chính nó ghi: Cloudflare Tunnel đọc CF-Connecting-IP, Tailscale Funnel đọc phần tử cuối của X-Forwarded-For. Edge riêng qua PUBLIC_ORIGIN giữ cả hai. Việc này đóng một đường né giới hạn tốc độ khi dò mật khẩu, chưa bao giờ là đường vào mà không cần passphrase.

Thay đổi

Các phiên dùng chung một checkout không còn được bảo tạo worktree

aki__akidevrule_context giờ bảo AI làm việc luân phiên trong checkout dùng chung, chỉ commit đúng đường dẫn của mình, và không tạo worktree, thư mục build, bản clone hay node_modules trừ khi không làm được nếu thiếu chúng. AI hỏi người điều phối trước, và ai merge thì dọn thứ đã tạo ngay trong cùng lượt.

Bảo mật

Kiểm tra dependency báo 0 cảnh báo

Lockfile giờ kéo các phiên bản đã vá của proxy-addr, MCP SDK, ip-address và fast-uri, và npm audit không báo gì. AkiMCP chạy trên node:http thuần và không bao giờ gọi hàm proxy-addr bị ảnh hưởng, nên đây là dọn dẹp, không phải vá một lỗ hổng chạm tới được. Gói npm không kèm lockfile, nên lockfile mới có ý nghĩa với bản cài từ mã nguồn.

Chỉ những tool máy bạn dùng được

Mục 8 của panel, “Tool providers”, liệt kê từng nhóm tool và bật tắt nó. Danh sách tool của AI nhờ vậy gọn hơn.

Mới

Tool đi theo app bạn đã cài

Tool của app chưa cài sẽ không được phục vụ: agy và kiro-cli có trên PATH, app Postman, một trình duyệt Chromium, AIObox. Danh sách tool của AI không còn thứ nó không dùng được.

Mới

Mỗi provider một công tắc

Mục 8 hiện tool của từng provider, app của nó đã cài chưa, và một công tắc bật tắt. Rule context, file, search và shell luôn bật. Công tắc lưu trong setting.json và có hiệu lực trên server ngay.

Thay đổi

agy và Kiro CLI mặc định tắt

Mỗi cái giao cả một tác vụ cho một agent trả phí khác, nên chúng tắt cho tới khi bạn bật ở mục 8. Máy từng dùng chúng trước bản này chỉ cần bấm bật một lần.

Mới

Detect again, không cần khởi động lại

Việc dò app chạy một lần khi khởi động. Detect again nhận ra app bạn vừa cài hoặc gỡ mà không cần khởi động lại. Client thấy thay đổi ở lần liệt kê tool kế tiếp, thường là chat mới hoặc sau khi kết nối lại connector.

Mới

Tùy chọn: cửa sổ AIObox

Khi đã cài app AIObox, aki__aiobox (đọc) và aki__aiobox_write (thao tác) cho AI đọc và thao tác trên các cửa sổ của nó. Những thao tác nào có là do AIObox công bố, nên AIObox thêm được thao tác mới mà AkiMCP không cần ra bản mới. Không có AIObox thì cả hai tool đều không được phục vụ.

Điều khiển trình duyệt trên profile dùng chung

chrome_launch không còn sao chép profile Chrome của bạn. Nó mở một bản clone profile dùng chung với AIObox, hoặc gắn vào khi AIObox đang chạy profile đó.

Thay đổi

chrome_launch mở profile dùng chung

Các bản clone nằm ở ~/.aki/cdp/profiles/ và chỉ AIObox tạo ra chúng. Truyền profile là Profile 14 hoặc id của clone. Thiếu clone thì báo no_profile, nêu các clone dùng chung đang có và cách gắn vào một Chrome đang chạy. chrome_profiles cũng liệt kê các id dùng chung.

Thay đổi

Gắn vào khi profile đang chạy

Khóa file của chính Chrome quyết định. Chrome đang chạy với cổng debug dùng được thì được gắn vào (status: attached, owned: false) và url của bạn mở thành tab mới. Chrome đang chạy mà cổng không dùng được thì bị từ chối. Chrome đã chết thì khóa cũ bị xóa và một Chrome mới khởi động. Khóa từ máy khác thì từ chối và không xóa gì.

Đã gỡ

Hết sao chép profile, hết refresh

Tham số refresh và bộ sao chép profile của akimcp đã bỏ: nó chép file SQLite khi đang mở và có thể đổi tên profile ngay dưới chân một Chrome đang chạy. Thư mục cũ ~/.aki/mcpsv/chrome-clones/ không còn được đọc, xóa lúc nào tùy bạn.

Thay đổi

chrome_stop chỉ dừng cái nó đã mở

Không có pid, chrome_stop chỉ tắt Chrome do chrome_launch khởi động. Phiên đã gắn vào chỉ bị quên đi. Cổng của phiên đang dùng được dò trước mỗi lần dùng, cổng chết thì phiên bị xóa.

Đã sửa

Thiếu trình duyệt thì báo ngay

Trình duyệt thiếu hoặc không chạy được trước đây khiến chrome_launch đợi 15 giây rồi mới báo hết thời gian chờ cổng. Giờ nó báo lỗi ngay, kèm đường dẫn file và lỗi hệ thống. Trên Windows, Chrome và Edge 64-bit cũng được tìm thấy, kể cả bản cài theo từng người dùng.

Đã sửa

Mọi lệnh trình duyệt kết thúc trong 50 giây

devtools_targets, devtools_eval, devtools_screenshot, các yêu cầu mở, đóng, chuyển tab và postman_eval đều kết thúc trong 50 giây, tính cả việc tìm target và kết nối. Client bỏ cuộc sau khoảng một phút và không nhận được gì, vậy mà trước đây một trang không phản hồi có thể giữ lệnh tới 10 phút. Hết giờ sẽ có mã timeout và bước tiếp theo: sau một lần evaluate, hãy kiểm tra bằng biểu thức chỉ-đọc ngắn trước khi chạy lại.

Lệnh gọi an toàn hơn, nói thẳng

Một cổng chặn trước mọi tool ghi, thông tin xác thực nằm ngoài khung chat, và nhãn rõ ràng về việc mỗi tool làm gì. Các giới hạn nằm ở cuối trang.

Mới

Tool ghi cần rule receipt hiện hành

Mọi tool không chỉ-đọc nhận tham số receipt và từ chối khi thiếu receipt sha256:…, bằng chứng AI đã nạp rule của bạn, do aki__akidevrule_context trả về. AI bỏ qua rule, hoặc mất rule khi chat bị nén ngữ cảnh, giờ không ghi được nữa. Lời từ chối như RULE_RECEIPT_MISSING hay RULE_RECEIPT_STALE cho biết phải gọi gì tiếp. File rule đổi thì receipt cũ thành stale.

Mới

Dự án tự đưa ra rule của nó

AkiMCP tìm CLAUDE.md, CLAUDE.local.md, AGENTS.md và GEMINI.md từ đường dẫn mà lệnh gọi chạm tới lên tới gốc, giống Claude Code, Codex và Gemini CLI. Tool ghi mà receipt chưa bao gồm các file này sẽ chưa chạy: nó trả về rule (giới hạn 32 KiB) kèm receipt mới để gọi lại. Tool đọc luôn chạy và thêm một dòng nêu tên các file. Các lệnh gọi cùng lúc vào một dự án chỉ hiện rule của dự án đó một lần.

Mới

Tool chỉ-đọc được đánh dấu

Mọi tool giờ khai báo mình có chỉ đọc hay không. 17 trong 38 tool chỉ đọc theo cơ chế (18 khi agy_run chỉ cho chế độ plan), nên ChatGPT thôi hỏi xác nhận chúng. Tool nào ghi được vẫn hỏi. Các nhãn này chỉ là trải nghiệm phía client, không thay allowlist, thư mục cho phép hay lớp chặn của fetch.

Mới

Thông tin xác thực nằm ngoài khung chat

Tool file không còn đọc hay ghi tokens.json, passphrase.txt, oauth-client.json, oauth-dcr-clients.json hay cloudflared-cred.json. run_cmd và task_start từ chối lệnh nhắc tới một trong các file đó, còn search_content bỏ chúng khỏi kết quả. Mọi kết quả tool cũng hiện giá trị có dạng token lấy từ các file ấy, passphrase và panel token là [redacted]. setting.json vẫn đọc và ghi được, đây là quyết định có chủ đích.

Bảo mật

Ba cách chạy mã ngoài ý muốn đã bị chặn

notify_user dán nội dung thông báo vào một dòng lệnh, nên một dấu nháy có thể chạy phần còn lại: giờ văn bản được truyền như dữ liệu. chrome_launch từng coi url bắt đầu bằng dấu gạch là cờ của Chrome: giờ nó từ chối. Trong vùng script tin cậy, node --eval=, node --require và python3 -c chạy mã mà vùng đó không hề chứa: giờ script của vùng phải là đối số đầu tiên của trình thông dịch, nên lệnh cần cờ như python3 -u phải có một dòng trong allowlist.

Bảo mật

local_fetch chặn nhiều hơn và kiểm tra lại mọi lần chuyển hướng

local_fetch giờ chặn các địa chỉ link-local và metadata của cloud, kể cả dạng IPv6 (fe80::/10, dạng IPv4-mapped, fd00:ec2::254), kiểm tra lại mọi bước chuyển hướng (tối đa 5) và chỉ đọc tối đa 512 KB của một phản hồi. Các địa chỉ fd.. khác vẫn truy cập được vì tailnet và mạng LAN gia đình dùng chúng.

Thấy AI của bạn đã làm gì

Mục 9 của panel, “Call log”, đặt cái gì được ghi lại. Không bao giờ ghi nội dung prompt, biểu thức hay tham số.

Mới

Mọi lệnh gọi, không kèm tham số

Mỗi lệnh gọi tool aki__ thêm một dòng vào tool-calls.jsonl trong thư mục dữ liệu: thời điểm, client và agent, tool, op, window, port, thành công hay mã lỗi, thời lượng và phiên bản server. Không bao giờ ghi văn bản, script hay URL bạn đã truyền.

Mới

Bạn chọn giữ bao nhiêu

Mục 9 đặt bật hay tắt, mức chi tiết, số ngày giữ và dung lượng tối đa, lưu xong là áp dụng từ lệnh gọi kế tiếp. basic, mặc định, giữ mã lỗi và một thẻ như click hay fetch thay cho script. detail thêm toàn văn lỗi (200 ký tự) và một mã băm ngắn của biểu thức eval. Theo mặc định file cũ hơn 40 ngày bị xóa và file hiện tại được chuyển sang file có ngày khi đạt 16 MB.

Mới

Biết AI nào đã làm

Nó trả lời AI nào đã điều khiển cửa sổ nào khi một tin nhắn rơi nhầm chat. Tên các header request của client chỉ được ghi một lần, không bao giờ ghi giá trị.

Mới

Đọc lại nhật ký thành báo cáo

npm run tool-calls biến nhật ký thành báo cáo về cách các AI điều khiển AIObox: tỷ lệ thành công, mã từ chối, lỗi schema cũ và các lệnh gọi từ phiên bản server cũ hơn. --days N giới hạn khoảng thời gian.

Mới

App cục bộ lấy token từ panel

GET /api/access-token trả về access token dùng chung trên loopback, có panel token chặn cửa, nên app cục bộ như AIObox không cần đọc tokens.json nữa. Nó không thêm quyền nào: ai giữ panel token đã đọc được token trên trang panel.

Đã sửa

Lệnh bị từ chối nói rõ lý do

Một chat giữ danh sách tool nó đã nạp, nên sau khi cập nhật nó có thể gửi tham số mà tool mới không nhận nữa. Lời từ chối (-32602) giờ nêu tên tham số tool không nhận. Khi mọi tham số đều hợp lệ, nó báo danh sách tool của client có thể đã cũ: hãy kết nối lại AkiMCP hoặc mở chat mới.

Kết nối từ nhiều nơi hơn

Notion giờ kết nối được như các AI web khác, và một MCP client cục bộ có thể tự chạy AkiMCP mà không cần tunnel.

Mới

Notion kết nối bằng passphrase

Custom MCP server của Notion tự đăng ký như Claude, ChatGPT và Grok: nhập URL, rồi passphrase. Nó nhận access token dùng chung cùng refresh token riêng, nên Roll token không làm nó hỏng nữa. Đừng dán access token làm bearer, bản dán đó hỏng sau mỗi lần roll. Thêm connection vào một agent Notion, rồi republish agent.

Mới

Thu hồi chỉ đăng xuất đúng client gọi

Một client có thể gọi POST /revoke để tự đăng xuất. Chỉ refresh của client đó chấm dứt, access token dùng chung vẫn còn. Phạm vi quyền client xin được chuyển sang token và không bao giờ bị nới rộng khi refresh.

Mới

Chạy như một lệnh cục bộ với --stdio

npx @akinet/akimcp --stdio phục vụ tool qua stdin và stdout, không cần gateway, tunnel hay token. Đây là lối vào mà một MCP client tự khởi chạy. Một bản ghi server.json mô tả gói này cho MCP Registry với tên io.github.lacvietanh/akimcp.

Thay đổi

Cloudflare Tunnel là ingress được khuyên dùng

Panel và README giờ khuyên dùng Cloudflare tunnel thay cho Tailscale Funnel: kết nối ổn định hơn, băng thông lớn hơn và mạng toàn cầu rộng hơn. Funnel vẫn là thứ npm start tự thiết lập, vì nó không cần tên miền.

Đã sửa

Request bị cắt giữa chừng không còn làm sập server

Một POST tới /token, /revoke hay /authorize mà kết nối đứt trước khi thân request tới, một client_id như constructor, hoặc thân /register là null từng làm tiến trình dừng và ngắt mọi client. Giờ mỗi trường hợp chỉ trả lời riêng request đó. Thân request OAuth bị giới hạn 64 KB.

Đã sửa

Lệnh hủy của client này không còn hủy request của client khác

Các client dùng chung một phiên nội bộ với id request được ánh xạ lại, nhưng lệnh hủy từng được chuyển đi với id của chính client, mà ở phía trên id đó là một request khác. Giờ lệnh hủy chỉ kết thúc request của chính người gọi, và việc chờ dừng ngay thay vì sau 10 phút.

Ghi chú nâng cấp

Nâng cấp từ 2.2?

Đây là bản major. Cập nhật, khởi động lại, rồi kết nối lại AkiMCP trong mọi client. Đang dùng 3.0.0? Chạy đúng lệnh cập nhật rồi khởi động lại: 3.0.1 không cần kết nối lại.

  1. 1Cập nhật bằng đúng lệnh bạn đã dùng để cài (bên dưới), rồi chạy lại.
  2. 2Kết nối lại AkiMCP trong mọi client, hoặc mở chat mới. Client chỉ nhận được tham số receipt mới sau khi kết nối lại, và Claude sẽ hỏi “Always allow” lại cho các tool đã đổi.
  3. 3Mở mục 8 của panel. Nếu trước đây bạn dùng agy hoặc Kiro CLI, hãy bật lại: giờ chúng mặc định tắt.
  4. 4chrome_launch không còn sao chép profile và không còn tham số refresh. Hãy mở một bản clone dùng chung do AIObox tạo, hoặc gắn vào một Chrome đang chạy, rồi xóa thư mục chrome-clones cũ nếu muốn.
# CLI toàn cục
npm install -g @akinet/akimcp
akimcp
# Từ mã nguồn
git pull && npm install && npm start

Những gì đổi bên dưới

Danh sách tool trong AI

TrướcKhông có nhãn chỉ-đọc, không có tham số receipt

GiờMọi tool đều có nhãn, tool ghi nhận receipt. Kết nối lại mọi client

Tool ghi

TrướcChạy mà không kiểm tra rule đã được nạp

GiờBị từ chối cho tới khi aki__akidevrule_context cấp receipt

agy và Kiro CLI

TrướcĐược phục vụ

GiờTắt cho tới khi bạn bật ở mục 8

Mở profile Chrome

Trướcchrome_launch sao chép nó, refresh chép lại lần nữa

GiờMở bản clone dùng chung do AIObox tạo, hoặc gắn vào. Không còn refresh

Thư mục clone cũ

Trước~/.aki/mcpsv/chrome-clones/

GiờKhông còn được đọc. Xóa lúc nào tùy bạn

Trang không phản hồi

TrướcCó thể giữ một lệnh trình duyệt tới 10 phút

GiờKết thúc trong 50 giây với mã timeout

File chứa thông tin xác thực

TrướcTool file và cat có thể đưa một token đang dùng vào khung chat

GiờĐóng với các tool nhận đường dẫn. Kết quả hiện [redacted]

Hiểu rõ giới hạn

Một tính năng bảo mật đáng tin sẽ nói rõ nó dừng ở đâu.

  • Việc che thông tin xác thực chặn được sai sót, không chặn được model cố tình: bản sao đã mã hóa (nén, base64) không được nhận ra, và model mở rộng allowlist thành một shell thì đọc được mọi thứ bạn đọc được.
  • local_fetch kiểm tra host được đưa vào, không kiểm tra tên DNS trỏ tới đâu, nên một tên trỏ tới địa chỉ bị chặn sẽ không bị bắt.
  • Bản sửa notify_user đã được tái hiện và kiểm lại trên macOS. Đường chạy trên Windows và Linux mới chỉ có test về tham số dòng lệnh.
  • Các nhãn chỉ-đọc là trải nghiệm phía client. Chúng không thay allowlist, thư mục cho phép hay lớp chặn của fetch.
  • Khi AIObox đang chạy, Chrome mở bằng chrome_launch không có panel hay handle của AIObox, và kết quả có cảnh báo về điều đó.
  • Cloudflare Tunnel được khuyên dùng, nhưng mức chênh về số request bị rớt so với Tailscale Funnel chưa được đo.
  • Trên Tailscale Funnel, bộ chặn đọc phần tử cuối của X-Forwarded-For. Việc Funnel ghi địa chỉ thật của người gọi vào đó được đọc từ mã nguồn của Tailscale, chưa thấy trên một request Funnel thật. Với Cloudflare Tunnel, CF-Connecting-IP đã được xem trực tiếp.

Sẵn sàng thử chưa?

Xem panel trong bản xem trước, đọc toàn bộ mô hình bảo mật, hoặc vào thẳng trang cài đặt.