--- title: Chạy một MCP localhost dùng chung cho mọi agent AI date: 2026-08-23 11:55:03.104219 UTC --- Mình thích [Nushell] nên cũng mong muốn trợ lý AI viết script shell bằng Nu, và gắn Nushell vào agent [Crush] dưới dạng MCP server để "nhắc khéo". Trong một lần cập nhật Crush gần đây thì tự dưng nó không khởi chạy Nushell MCP lên được nữa, nhưng chỉ bị trục trặc với phương vận `stdio`, do bất đồng giữa Crush và Nushell khi bắt tay, còn `http` thì vẫn bình thường. Thế là mình chuyển sang dùng Nushell MCP ở giao thức `http` và khám phá ra nó tối ưu hơn ở một chuyện: Có thể cài đặt để chỉ cần chạy một tiến trình Nushell MCP server và cho tất cả agent kết nối vào MCP chung này, thay vì mỗi agent khởi chạy một process MCP server như khi dùng `stdio`. Khi dùng MCP ở phương vận `http`, agent sẽ không tự khởi chạy MCP server như đối với `stdio`, nên người ta ngại dùng. Nhưng đây là lúc Linux toả sáng vì trên Linux ta dễ dàng biến MCP service thành dịch vụ tự khởi động, ta không cần bận tay bận chân tắt mở MCP server mỗi khi cần dùng đến. Ý tưởng là dùng [systemd] để tự động bật server MCP lên. Phần sau đây sẽ hướng dẫn cách cài đặt MCP server [Lightpanda] thay vì Nushell vì ngay hôm mình viết bài này thì Nushell lại có một cập nhật khiến MCP `http` không bắt tay được với Crush nhưng `stdio` thì được. [Lightpanda] là một trình duyệt dành cho agent AI, nhẹ và chạy nhanh, dùng cho hoàn cảnh không cần render đồ hoạ. Lightpanda được viết mới từ đầu, không phải fork từ Chromium hay Firefox. Đầu tiên, hãy chọn port cho MCP server Lightpanda. Mình sẽ chọn port 3232, vì nó dễ nhớ và vì máy mình không có phần mềm nào đang dùng port này cả. Trước khi chọn port, bạn nên kiểm tra máy mình đang có phần mềm nào giành trước port này không: ```sh ss -ln4 | rg 3232 ``` Tham số `-ln4` của lệnh `ss` nghĩa là: - `-l`: Chỉ liệt kê socket nào đang "lắng nghe" (listening). - `-n`: Giữ port dạng số, nghĩa là đừng dịch `80` thành `http`. - `-4`: Chỉ liệt kê socket trên IPv4. Ta sẽ tạo một service ở cấp user cho Lightpanda, bằng cách tạo một file *~/.config/systemd/user/lightpanda-mcp-server.service* với nội dung như sau: ```ini [Unit] Description=Lightpanda MCP HTTP Service After=network.target [Service] Type=simple ExecStart=/usr/bin/lightpanda mcp --port 3232 [Install] WantedBy=default.target ``` Lưu ý về đường dẫn file chạy của Lightpanda. Do mình cài nó từ file *deb* nên nó được cài vào */usr/bin/*. Nếu bạn cài từ script *install.sh* theo trang chủ thì đường dẫn sẽ khác. Chạy thử service này coi có thành công không: ```shellsession $ systemctl --user start lightpanda-mcp-server $ systemctl --user status lightpanda-mcp-server ● lightpanda-mcp-server.service - Lightpanda MCP HTTP Service Loaded: loaded (/home/quan/.config/systemd/user/lightpanda-mcp-server.service; enabled; preset: enabled) Active: active (running) since Sun 2026-08-23 16:50:42 +07; 3min 56s ago Invocation: e1a36cee78dd4766a07f9a21b0c713cc Main PID: 206288 (lightpanda) Tasks: 16 (limit: 12946) Memory: 4.7M (peak: 6.6M) CPU: 80ms CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/lightpanda-mcp-server.service └─206288 /usr/bin/lightpanda mcp --port 3232 Aug 23 16:50:42 MiniDesk systemd[156186]: Started lightpanda-mcp-server.service - Lightpanda MCP HTTP Service. Aug 23 16:50:42 MiniDesk lightpanda[206288]: $time=1787478642208 $scope=mcp $level=note $msg="mcp http server running" address=127.0.0.1:3232 ``` Lưu ý, với service ở cấp *user* (được lưu trong `$HOME` thay vì thư mục hệ thống */etc/*, */usr/*), bạn sẽ chạy với `systemctl --user` và không có `sudo`. Tiếp đến, thêm MCP này vào [Crush], bằng cách sửa file *~/.config/crush/crushrc* và thêm vào dòng: ```sh mcp add lightpanda --type http --url 'http://localhost:3232' ``` Mở Crush lên và kiểm tra trong mục MCP xem có xuất hiện "Lightpanda" với chấm xanh lá không. ![Lightpanda in Crush](https://quan-images.b-cdn.net/blogs/2026/08/Lightpanda.png) Sau khi đã ưng ý rồi thì "enable" dịch vụ này để `systemd` tự động chạy Lightpanda mỗi khi ta login: ```console $ systemctl --user enable lightpanda-mcp-server ``` Điều hay ho với `systemd` là bất kể ta có login bao nhiêu session, dù là session desktop hay SSH, thì `systemd` cũng chỉ chạy một tiến trình Lightpanda, và sẽ tắt đi khi ta đã logout hết các session. Với `systemd`, ta còn có thể làm tiết kiệm tài nguyên hơn nữa bằng cách trì hoãn khởi động MCP server đến khi nào có phần mềm client nào cần kết nối đến nó. Cơ chế này gọi là "socket activation", `systemd` sẽ tạo socket lắng nghe trước, khi nào có ai kết nối vào socket thì mới gọi dịch vụ tương ứng dậy, và chuyển giao socket qua. Tuy nhiên để tận dụng được tính năng này thì phần mềm đối tượng được gọi dậy phải hỗ trợ "socket passing". Thường các phần mềm cross-platform sẽ không hỗ trợ các tính năng này. Một tiện lợi khác nữa là ta có thể quan sát log của MCP qua `journald`: ``` journalctl --user -fu lightpanda-mcp-server.service ``` ![MCP with logs](https://quan-images.b-cdn.net/blogs/2026/08/MCP%20server%20log.png) Trên hình là mình đang kiểm tra tại sao [Lightpanda] không chạy được một số website viết bằng VueJS. Để khép lại thì mình đưa ra một số đánh giá về các phần mềm MCP, nói chung là không được như kì vọng: - Đa số được viết bằng NodeJS nên mình "né" (ngai cài nhiều đống *node_modules*) nên chúng không có cơ hội tỏ ra hữu ích. - Nushell được gắn vào dưới dạng MCP nhưng phần lớn thời gian các model LLM phớt lờ không chịu xài. - Lightpanda chưa đủ hoàn thiện để xử lý website nặng về JavaScript. [nushell]: https://www.nushell.sh/ [lightpanda]: https://lightpanda.io/ [systemd]: https://systemd.io/ [crush]: https://github.com/charmbracelet/crush