Hướng dẫn kết nối MCP Server để AI làm việc với dữ liệu thật trên EzyPlatform cho website Doanh nghiệp
Back To BlogsỞ bài trước, chúng ta đã bắt đầu chuyển website Ezyvora từ một giao diện tĩnh sang website sử dụng dữ liệu thật được quản lý trên EzyPlatform. Nhưng có một vấn đề: khi yêu cầu Claude Code hoặc Codex ghép dữ liệu, AI có thể đọc mã nguồn trong VS Code, nhưng nếu không có một cầu nối phù hợp, AI chưa thực sự biết bên trong EzyPlatform của chúng ta đang có những dữ liệu, API, schema hay chức năng nào.
Điều này dễ dẫn đến một cách làm không hiệu quả:
- Tìm API
- →
- Sao chép tài liệu
- →
- Gửi cho AI
- →
- AI viết code
- →
- Gặp lỗi
- →
- Tìm thêm thông tin
MCP Server giúp rút ngắn vòng lặp đó.
Sau khi kết nối MCP Server, AI Assistant có thể sử dụng các công cụ EzyPlatform cung cấp để tìm hiểu hệ thống, truy vấn dữ liệu và tạo những hàm lấy dữ liệu mới khi cần. Theo tài liệu EzyPlatform, MCP Server còn cung cấp cho AI các công cụ để tra schema, quản lý fetcher, event handler và một số loại nội dung/cấu hình khác.
Mục tiêu của bài này
- AI chỉ đọc mã nguồn
- →
- AI + MCP Server
- →
- AI hiểu dữ liệu EzyPlatform
- →
- AI tạo hàm lấy dữ liệu
- →
- Website hiển thị dữ liệu thật
1. MCP Server giải quyết vấn đề gì?
Ở các bước trước, chúng ta thường nói với AI: "Hãy lấy danh sách bài viết từ EzyPlatform".
Nhưng để thực hiện yêu cầu này, AI cần biết nhiều thứ hơn:
- "Bài viết nằm ở đâu?"
- "EzyPlatform đang cung cấp dữ liệu đó bằng cách nào?"
- "Tên trường ảnh đại diện là gì?"
- "Lấy slug ở đâu?"
- "Có API hoặc GraphQL query sẵn chưa?"
Nếu không có đủ thông tin, AI có thể phải suy luận từ mã nguồn hoặc cần chúng ta cung cấp tài liệu thủ công. MCP Server tạo một lớp kết nối giữa AI Assistant và EzyPlatform. Có thể hình dung luồng như sau:
- Bạn
- →
- Claude Code / Codex
- →
- MCP Server
- →
- EzyPlatform
- →
- Dữ liệu thật
Khi đó, thay vì chỉ nói với AI cách viết code, chúng ta có thể mô tả dữ liệu mình muốn. Ví dụ:
"Hãy kiểm tra EzyPlatform và cho tôi biết hiện tại có những bài viết nào đã được xuất bản."
"Tôi cần lấy 3 bài viết mới nhất để hiển thị trên Trang chủ."
AI có thể dựa vào những công cụ MCP Server cung cấp để tìm cách lấy đúng dữ liệu thay vì tự đoán cấu trúc hệ thống.
2. Hai cách chính để đưa dữ liệu vào website
Trước khi cấu hình, chúng ta cần hiểu hai cách mà mình sẽ sử dụng nhiều trong quá trình Vibe Coding với EzyPlatform.
| Cách | Phù hợp khi | Dữ liệu được lấy |
|---|---|---|
| GraphQL Fetcher | Dữ liệu cần được tải hoặc thao tác từ phía trình duyệt. | Sau khi trang đã tải. |
| Ezy Function | Nội dung cần có ngay khi server render HTML, đặc biệt là nội dung SEO. | Trong lúc server render trang. |
Fetcher phù hợp với những tương tác phía client. Trong khi đó, ezy function có thể được gọi trực tiếp khi template được render trên server, vì vậy dữ liệu có thể nằm sẵn trong HTML trả về cho trình duyệt. Bài MCP Server của EzyPlatform minh họa sự khác biệt này bằng fetcher gọi từ client và get_latest_posts chạy trong template để lấy bài viết mới nhất.
Với website doanh nghiệp Ezyvora, chúng ta sẽ ưu tiên ezy function cho những nội dung như Dịch vụ → Bài viết → Nội dung Trang chủ, vì đây đều là nội dung mà công cụ tìm kiếm nên đọc được ngay.
3. Cấu hình MCP Server trên EzyPlatform
Đầu tiên, cần đảm bảo plugin GraphQL đã được cài đặt trên EzyPlatform.
Trong trang quản trị, vào: GraphQL → Cài đặt.
Nếu đang sử dụng theme Freestyle, tài liệu hiện tại hướng dẫn cấu hình bạn có thể xem thêm tại đây: Chương 9 - MCP Server, các package cần scan như sau:
<code>graphql.packages_to_scan=org.youngmonkeys.ezyarticle.web.controller.view, org.youngmonkeys.ezyarticle.web.controller.api, org.youngmonkeys.ecommerce.web.controller.view, org.youngmonkeys.ecommerce.web.controller.api</code>
Sau khi lưu cấu hình, vào Bảng điều khiển → Web → Khởi động lại. Việc khởi động lại Web giúp cấu hình GraphQL mới có hiệu lực.
4. Kết nối VS Code với MCP Server
Ở những bài đầu của chuỗi này, chúng ta đã có environment.json chứa thông tin kết nối tới EzyPlatform Admin. Ví dụ:
<code>{
"environments": [
{
"name": "production",
"admin_url": "https://admin.example.com",
"admin_access_token": "access_token_cua_ban",
"default": true
}
]
}</code>
Bây giờ có thể yêu cầu AI sử dụng chính thông tin đó để cấu hình MCP Server.
Prompt mẫu – Kết nối MCP Server
"Lưu thông tin MCP Server vào dự án hiện tại.
Hãy lấy admin_url và admin_access_token của environment mặc định từ file environment.json.
Cấu hình MCP Server theo cấu trúc:
<code>{
"mcpServers": {
"{tên miền của admin_url}": {
"type": "http",
"url": "{admin_url}/graphql/mcp",
"headers": {
"Authorization": "Bearer {admin_access_token}"
}
}
}
}</code>
Hãy tạo file cấu hình ở vị trí phù hợp với AI Assistant tôi đang sử dụng.
Không thay đổi environment.json."
Ví dụ với Claude Code, cấu hình dự án có thể nằm trong .mcp.json.
Lưu ý: file MCP chứa access token không nên được đưa công khai lên repository. Nếu dự án được quản lý bằng Git, hãy kiểm tra kỹ các file chứa credential trước khi commit.
5. Mở phiên chat mới và kiểm tra kết nối
Sau khi tạo cấu hình, hãy mở một phiên chat mới trong Claude Code hoặc Codex để AI nạp lại MCP Server. Sau đó hỏi:
"Bạn kết nối được tới MCP Server của EzyPlatform trong dự án hiện tại chứ? Hãy kiểm tra kết nối giúp tôi."
Nếu AI có thể gọi công cụ kiểm tra và nhận phản hồi thành công, MCP Server đã sẵn sàng. Trong ví dụ chính thức của EzyPlatform, phản hồi pong được dùng để xác nhận kết nối.
Đến đây, AI không chỉ còn nhìn thấy HTML, CSS và JavaScript, mà đã có thêm một cánh cửa để tìm hiểu dữ liệu và chức năng phía EzyPlatform.
6. Cho AI tìm hiểu hệ thống trước khi tạo hàm
Đây là bước rất quan trọng. Đừng kết nối MCP xong rồi ngay lập tức yêu cầu:
"Tạo API lấy dịch vụ cho tôi."
Hãy để AI kiểm tra hệ thống trước.
Prompt mẫu
"Hãy sử dụng MCP Server để tìm hiểu dữ liệu và các chức năng hiện có trên EzyPlatform.
Tôi đang xây dựng website Ezyvora và cần lấy dữ liệu cho:
- Danh sách dịch vụ.
- Chi tiết dịch vụ.
- Danh sách bài viết.
- Chi tiết bài viết.
- 3 bài viết mới nhất trên Trang chủ.
Hãy kiểm tra trước:
- Schema hiện có.
- API hoặc GraphQL query đã có.
- Fetcher đã tồn tại.
- Ezy function hoặc event handler có thể tái sử dụng.
Ưu tiên sử dụng chức năng có sẵn.
Chưa tạo fetcher hoặc event handler mới."
AI sẽ trả kết quả kiểm tra như giao diện dưới đây:
Tư duy ở đây giống với việc chúng ta xử lý template: đọc trước → hiểu trước → tái sử dụng trước → chỉ tạo mới khi thiếu. MCP Server có công cụ để AI tra "bản đồ" hệ thống, chẳng hạn schema web và Swagger phía admin, nhằm giảm việc suy đoán trước khi thao tác.
7. Yêu cầu AI tìm Ezy Function cho Blog
Thay vì yêu cầu AI tự xây API lấy bài viết, trước tiên hãy kiểm tra những Ezy Function đã có.
Prompt mẫu
"Hãy sử dụng MCP Server để lấy danh sách Ezy Function hiện có trên EzyPlatform.
Tôi cần dữ liệu Blog cho website doanh nghiệp với hai trường hợp:
- Lấy các bài viết đã xuất bản mới nhất để hiển thị trên Trang chủ, không cần phân trang.
- Lấy danh sách bài viết cho trang Blog, có phân trang.
Hãy tìm các Ezy Function phù hợp và kiểm tra tham số đầu vào, dữ liệu trả về.
Chưa chỉnh sửa code."
Với hệ thống hiện tại, hai function cần quan tâm là:
get_latest_published_posts_by_typeget_post_pagination
AI sẽ trả kết quả kiểm tra như giao diện dưới đây:
8. Đưa bài viết mới nhất lên Trang chủ
Đối với khu vực Bài viết mới nhất trên Trang chủ, sử dụng get_latest_published_posts_by_type. Function này phù hợp khi chỉ cần lấy một số bài mới nhất và không cần phân trang.
Prompt mẫu
"Hãy sử dụng MCP để kiểm tra get_latest_published_posts_by_type, sau đó dùng function này để thay dữ liệu mẫu trong phần "Bài viết mới nhất" trên Trang chủ bằng dữ liệu thật.
Yêu cầu:
- Chỉ lấy bài đã xuất bản.
- Không cần phân trang.
- Sử dụng đúng loại bài Blog hiện tại.
- Giữ nguyên giao diện card hiện có.
- Không hard-code dữ liệu.
- Không tạo function mới nếu function hiện tại đã đáp ứng.
Sau khi hoàn thành, hãy cho tôi biết những file đã chỉnh sửa."
Sau đó Preview Trang chủ và đối chiếu các bài hiển thị với EzyPlatform Admin.
9. Đưa dữ liệu thật vào trang Blog
Trang Blog cần hiển thị nhiều bài viết nên sử dụng get_post_pagination. Trước khi chỉnh code, AI nên kiểm tra function qua MCP để biết chính xác cách truyền trang, số lượng bài và cấu trúc kết quả.
Prompt mẫu
"Hãy kiểm tra get_post_pagination thông qua MCP và sử dụng function này để thay danh sách bài viết mẫu trên trang Blog bằng dữ liệu thật.
Yêu cầu:
- Lấy đúng bài Blog.
- Sử dụng phân trang do EzyPlatform cung cấp.
- Khi người dùng chuyển trang, lấy dữ liệu của trang tương ứng.
- Không tải toàn bộ bài viết rồi tự phân trang ở frontend.
- Giữ nguyên giao diện Blog và responsive hiện tại.
- Không hard-code số trang.
Sau khi hoàn thành, hãy dừng lại để tôi Preview."
10. Preview và kiểm tra dữ liệu
Cuối cùng, kiểm tra cả hai khu vực:
- Trang chủ:
get_latest_published_posts_by_type→ Bài viết mới nhất.
- Trang Blog:
get_post_pagination→ Danh sách bài viết → Phân trang.
Thử tạo hoặc xuất bản một bài viết mới trên EzyPlatform rồi tải lại website. Tiếp tục thử chuyển giữa các trang của Blog. Nếu dữ liệu trên website thay đổi theo dữ liệu quản lý trên EzyPlatform mà không phải sửa lại HTML, quá trình kết nối đã thành công.
Kết luận
Với website doanh nghiệp, MCP Server chủ yếu giúp AI kiểm tra những chức năng EzyPlatform đã có trước khi viết code. Quy trình nên giữ đơn giản:
- MCP Server
- →
- Tìm Ezy Function
- →
- Kiểm tra function
- →
- Tích hợp dữ liệu thật
- →
- Preview
Nhờ đó, AI có thể ưu tiên tái sử dụng các chức năng sẵn có như get_latest_published_posts_by_type và get_post_pagination, thay vì tự tạo thêm API hoặc logic không cần thiết.
Nguyễn Thị Thanh Tuyền - Chuyên viên Marketing