Gần đây, tôi đã thử nghiệm rất nhiều công cụ để tự động hóa các tác vụ đơn giản, nhằm giữ cho website của mình luôn được cập nhật.
Tôi tạo ra rất nhiều nội dung, từ video, bài blog cho đến việc làm khách mời trên nhiều podcast, và tôi muốn tất cả đều hiện diện trên trang web. Việc tập hợp mọi thứ ở một nơi vừa dễ chia sẻ, vừa là cách tuyệt vời để nhìn lại hành trình. Nhưng công việc này thật tẻ nhạt và tốn thời gian – thứ mà tôi luôn thiếu. Vì vậy, đây chính là trường hợp hoàn hảo để AI đảm nhận. Vậy tôi đã bắt đầu như thế nào?
Thời Kỳ Trước Khi Có AI
Đầu tiên, hãy để tôi kể bạn nghe quy trình thêm một tập podcast mới vào website. Tôi dùng Nuxt content, về cơ bản mỗi podcast chỉ là một file markdown với phần metadata dạng YAML. Phần YAML này chứa các thông tin như ngày phát hành, tên podcast, URL hình ảnh và tên host chẳng hạn. Năm ngoái, tôi chỉ đơn giản là sao chép một file cũ trong VSCode, rồi sửa thủ công tất cả thông tin thành của podcast mới. Cụ thể là: mở link tập mới, sao chép thông tin từ trang host, dán vào file markdown. Sau đó, tôi phải tải hình ảnh về máy rồi upload lên Cloudinary, lấy URL mới từ Cloudinary và cập nhật vào file. Cloudinary rất tuyệt để quản lý và tối ưu hình ảnh, giúp website chạy hiệu quả, nhưng việc tải lên-tải xuống thật phiền phức. Đôi khi tôi trì hoãn rất lâu mới thêm tập mới vào site, đơn giản vì tôi… lười.
Tự Động Hóa Một Phần Với Prompts và MCP Playwright
Tôi bắt đầu tự động hóa một phần quy trình bằng cách sử dụng các prompt có thể tái sử dụng trong VSCode. Tôi tạo ra các hướng dẫn cho Copilot về việc nó cần làm gì. Sau đó, tôi chỉ cần chạy prompt trong một cuộc trò chuyện mới và cung cấp URL podcast. Tôi đã cài đặt MCP Playwright, nên Copilot sẽ dùng nó để truy cập URL, thu thập mọi metadata cần thiết. Cách này khá hiệu quả, tiết kiệm nhiều thời gian, thậm chí tôi có thể cập nhật hàng loạt tập chỉ với nhiều URL.
Tuy nhiên, vấn đề hình ảnh vẫn chưa được giải quyết. Tôi từng nghĩ đến việc ngừng dùng Cloudinary để chuyển sang lưu hình ảnh trực tiếp trong thư mục public của site cho nhanh. Nhưng như vậy tôi sẽ mất đi những lợi ích và tính năng tối ưu hóa hình ảnh hàng đầu của Cloudinary.
Tự Động Hóa Toàn Bộ Với Goose, MCP Playwright, MCP Cloudinary & MCP GitHub
Sau đó, tôi chuyển sang thử nghiệm Goose, một coding agent từ Block. Goose là ứng dụng desktop (cũng có bản CLI). Tôi muốn xem liệu mình có thể cải thiện hơn nữa quy trình tự động hóa này không. Tôi có thể tiếp tục mày mò trong VSCode, nhưng gần đây tôi muốn thử hoàn thành tác vụ mà không cần mở code editor. Nghĩa là, tôi chỉ cần xem xét pull request trên hệ thống CI và để agent tự làm phần việc của nó. Tôi tin đây là xu hướng tương lai, nên muốn trải nghiệm cảm giác “viết code” theo cách này.
Vì vậy, tôi sao chép prompt của mình vào Goose và lưu nó dưới dạng một recipe (công thức). Các recipe khá giống prompt, nhưng bạn có thể dùng tham số. Tôi thêm URL podcast làm tham số và nó sẽ tự động được nhận diện. Còn nhiều tùy chọn khác tôi chưa khám phá hết, nhưng thế này là đủ cho nhu cầu của tôi. Giờ đây, Goose dùng MCP Playwright để truy cập trang podcast và thu thập mọi thông tin cần thiết. Sau đó, tôi yêu cầu Goose tải hình ảnh về local, và nó làm được. Rất tuyệt! Nhưng liệu tôi có nên bỏ Cloudinary chỉ vì… lười?
Thế là tôi nghĩ: giá như Cloudinary có một MCP server thì sao? Khi đó Goose có thể dùng MCP đó để upload hình ảnh trực tiếp và cập nhật metadata với đúng image ID. Mọi vấn đề sẽ được giải quyết. Tôi tìm trong phần extensions của Goose với từ khóa “Cloudinary”, và bạn biết không, thực sự đã có một MCP server cho Cloudinary. Không những thế, nó còn hoạt động rất trơn tru. Goose sử dụng MCP Playwright để thu thập nội dung và hình ảnh, sau đó dùng MCP Cloudinary (với API key đã lưu trong cài đặt) để đẩy hình ảnh lên tài khoản Cloudinary của tôi. Nó thậm chí còn tự động biết nên lưu ảnh vào thư mục nào.
Thế là xong! Mọi thứ hoạt động hoàn hảo. Tôi kiểm tra tài khoản Cloudinary và thấy hình ảnh đã ở đó. Tiếp theo, tôi yêu cầu Goose chạy dev server và dùng MCP Playwright để mở trang podcast, xác minh mọi thứ hiển thị đúng. Tôi không chỉ thấy trình duyệt mở lên với các tập podcast mới, mà còn có thể yêu cầu chụp ảnh màn hình trang đó.
Dĩ nhiên, vẫn còn một bước cuối. Đã tiến xa đến thế rồi, thì làm cho trọn vẹn luôn. Tôi yêu cầu Goose tạo một pull request, và nó đã làm được nhờ MCP GitHub mà tôi đã cấu hình sẵn. Sau đó, tôi review code để đảm bảo không có gì bất thường, đặc biệt là các URL từ Cloudinary. Và đúng như dự đoán, mọi thứ đều ổn. Tôi hợp nhất (merge) pull request và các tập podcast mới đã chính thức có mặt trên website.
Kết Luận
Vấn đề là thế này. Tôi đã dành thời gian để tìm hiểu, thiết lập và đảm bảo mọi thứ hoạt động. Đúng là ban đầu, tự copy-paste có thể còn nhanh hơn. Nhưng giờ đây, mọi thứ đã xong. Lần tới khi cần thêm tập podcast, tôi chỉ cần chạy recipe trong Goose và truyền vào URL. Tối nay tôi là khách mời trong một tập podcast, nên khi tập đó lên sóng, tôi có thể dễ dàng thêm nó vào website ngay lập tức. Trên thực tế, nếu có một đội ngũ cùng làm website, tôi chỉ cần chia sẻ recipe này và họ chỉ việc chạy nó.
Tôi dùng Nuxt content cho website, nghĩa là không có CMS truyền thống. Nội dung nằm trong các file markdown, điều này rất thuận tiện cho developer, nhưng lại không thân thiện với người không chuyên. Nhưng giờ đây, ngay cả mẹ tôi cũng có thể thêm một tập podcast mới vào site. Thật tuyệt vời! Đây chỉ là website cá nhân, nhưng hãy thử nghĩ về khả năng ứng dụng của giải pháp này cho doanh nghiệp.
Tôi rất ấn tượng với những gì Goose có thể làm. Càng dùng, tôi càng thấy nó đáng kinh ngạc. Tôi sẽ tiếp tục bằng cách thêm các recipe khác cho những loại nội dung khác, hoặc có lẽ chỉ cần mở rộng recipe hiện tại với nhiều tham số hơn. Tôi sẽ tiếp tục khám phá. Điều này thật thú vị.
Hãy cho tôi biết nếu bạn thấy bài viết này thú vị, đang làm điều gì tương tự, hoặc đã sử dụng bất kỳ MCP nào được đề cập. Chúng ta đang sống trong một thời đại đầy thú vị, vì vậy nếu bạn chưa bắt đầu thử nghiệm, thì còn chần chừ gì nữa. Cứ khám phá và tận hưởng niềm vui thôi!
Tags: AI automation, Goose agent, Content workflow







