Tạo MCP Server có thu phí: Claude tự động nhận tiền trong chat
Bạn đang gặp vấn đề nào?
Hãy tưởng tượng: Bạn vừa xây dựng một bot AI bán khoá học trên mạng. Khách hàng nhắn tin yêu cầu mua, bot giải thích nội dung chi tiết... rồi vấn đề xảy ra. Để hoàn tất thanh toán, bạn phải chuyển hướng khách sang trang web khác, copy mã thanh toán, hoặc nhờ nhân viên xử lý thủ công. Nhiều khách chán nản và bỏ đi mà không hoàn tất mua hàng.
Câu hỏi tự nhiên: Tại sao bot AI không thể thu tiền ngay trong cuộc trò chuyện, nhanh gọn, an toàn?
Có một cách làm điều đó, và bài viết này sẽ chỉ cho bạn cách tạo một MCP server có khả năng thu phí — nơi Claude hoặc agent AI bất kỳ có thể yêu cầu thanh toán, và tiền sẽ chảy trực tiếp vào tài khoản ngân hàng của bạn, mà không bao giờ bị "lưu trữ" ở đâu cả.
Tại sao bạn cần MCP server có thu phí?
Model Context Protocol (MCP) là tiêu chuẩn mới cho phép AI agent (Claude, các mô hình khác) kết nối với các công cụ bên ngoài một cách an toàn và có cấu trúc. MCP server không chỉ cho phép truy vấn dữ liệu hay gửi email — nó cũng có thể xử lý giao dịch tài chính.
Những lợi ích chính:
- Trải nghiệm liền mạch: Khách không cần rời khỏi cuộc trò chuyện để thanh toán.
- Tăng tỷ lệ chuyển đổi: Giảm ma sát, tăng số người hoàn tất mua hàng.
- An toàn tuyệt đối: Tiền đi thẳng vào tài khoản ngân hàng thực của bạn, không "trôi" nơi khác.
- Tính năng trí tuệ nhân tạo: Agent AI có thể tự quyết định khi nào thu tiền dựa trên ngữ cảnh.
- Tích hợp dễ dàng: Chỉ cần vài dòng Python, không cần hạ tầng phức tạp.
AgentPay VN là gì? Tại sao chọn nó?
AgentPay VN là SDK Python open-source (giấy phép MIT) + MCP server được thiết kế riêng cho trường hợp này.
Điểm nổi bật:
- Không lưu trữ tiền: QR code trỏ thẳng vào tài khoản ngân hàng của bạn (VietQR).
- Xác nhận tự động: Hệ thống feed ngân hàng tự động xác nhận khi tiền vào.
- Simple API: 3 bước: tạo yêu cầu thanh toán → gửi URL checkout → chờ xác nhận.
- Tích hợp Claude: Dễ dàng kết nối với MCP protocol.
- Miễn phí: Không có phí dịch vụ hoặc ẩn, chỉ cần cài đặt.
Quy trình 3 bước: Cách hoạt động
Bước 1: create_payment_request()
↓
Bước 2: send checkout_url() → Khách nhấn QR
↓
Bước 3: await_settlement() → Tiền vào tài khoản
Mỗi bước là một cuộc gọi API đơn giản. Bạn không cần quản lý "tài khoản trung gian" hay lo lắng về bảo mật toàn cầu — tiền là của bạn ngay từ khi người mua quét QR.
Cài đặt AgentPay VN
Bước đầu tiên là cài đặt SDK Python:
pip install agentpay-vn
Còn nếu bạn muốn chạy MCP server (để Claude kết nối):
pip install agentpay-mcp
Vậy là xong! Không cần khoá API phức tạp hay đăng ký dài hạn.
Code thực tế: Tạo yêu cầu thanh toán
Hãy viết một script Python đơn giản để tạo yêu cầu thanh toán:
from agentpay_vn import PaymentRequest, PaymentClient
# Khởi tạo client (bạn cần cung cấp thông tin ngân hàng của mình)
client = PaymentClient(
bank_account="123456789", # Số tài khoản của bạn
bank_code="VIETCOMBANK", # Mã ngân hàng
bank_name="Vietcombank" # Tên ngân hàng
)
# Tạo yêu cầu thanh toán cho một khóa học
payment_req = PaymentRequest(
amount=299000, # 299,000 VND cho khóa học
description="Khoá học AI Agents - Thanh toán",
order_id="order_20250115_001", # ID duy nhất cho đơn hàng
customer_email="customer@example.com",
customer_phone="0901234567"
)
# Gửi yêu cầu đến AgentPay (sẽ nhận lại checkout URL)
response = client.create_payment_request(payment_req)
print(f"Checkout URL: {response.checkout_url}")
print(f"QR Code: {response.qr_code}")
print(f"Payment ID: {response.payment_id}")
Giải thích từng dòng:
PaymentClient: Khởi tạo client với thông tin ngân hàng thực của bạn.amount: Số tiền cần thu (tính bằng VND).description: Mô tả cho người mua (hiển thị trên QR).order_id: Định danh duy nhất (dùng để theo dõi).create_payment_request(): Gửi yêu cầu, nhận lại URL và QR code.
Kết quả trả về là một object chứa checkout_url (dạng link) và qr_code (mã QR nhị phân hoặc ảnh).
Chờ xác nhận thanh toán
Sau khi khách quét QR và thanh toán, bạn cần chờ xác nhận từ ngân hàng:
import asyncio
from agentpay_vn import SettlementClient
# Khởi tạo client để theo dõi settlement (xác nhận)
settlement_client = SettlementClient()
async def wait_for_payment(payment_id, timeout_seconds=600):
"""
Chờ xác nhận thanh toán từ ngân hàng
payment_id: ID từ create_payment_request
timeout_seconds: Thời gian chờ tối đa (10 phút)
"""
try:
settlement = await settlement_client.await_settlement(
payment_id=payment_id,
timeout=timeout_seconds
)
if settlement.is_settled:
print(f"✓ Thanh toán thành công!")
print(f" Số tiền: {settlement.amount} VND")
print(f" Thời gian: {settlement.settled_at}")
print(f" Mã giao dịch ngân hàng: {settlement.bank_ref_id}")
return settlement
else:
print("✗ Thanh toán bị từ chối")
return None
except Exception as e:
print(f"Lỗi khi chờ thanh toán: {e}")
return None
# Sử dụng
payment_id = "payment_123abc" # Từ bước tạo yêu cầu trên
result = asyncio.run(wait_for_payment(payment_id))
if result:
# Tạo tài khoản cho khách, gửi email xác nhận, v.v.
print("Bắt đầu cấp quyền truy cập cho khách...")
Giải thích:
await_settlement(): Hàm async chờ xác nhận từ feed ngân hàng.timeout: Nếu quá thời gian chờ, hàm sẽ hết hạn (không chờ vô tận).settlement.is_settled: True nếu tiền đã vào tài khoản.settlement.bank_ref_id: Mã tham chiếu từ ngân hàng (dùng để đối soát).
Tích hợp MCP Server cho Claude
Bây giờ, hãy tạo một MCP server để Claude có thể gọi các hàm thanh toán này:
{
"name": "agentpay-mcp",
"description": "MCP Server cho AgentPay VN - Thanh toán VietQR từ Claude",
"version": "1.0.0",
"tools": [
{
"name": "create_payment_request",
"description": "Tạo một yêu cầu thanh toán mới. Trả về checkout_url và QR code.",
"inputSchema": {
"type": "object",
"properties": {
"amount": {
"type": "integer",
"description": "Số tiền cần thu (VND)"
},
"description": {
"type": "string",
"description": "Mô tả giao dịch"
},
"order_id": {
"type": "string",
"description": "ID đơn hàng duy nhất"
},
"customer_email": {
"type": "string",
"description": "Email khách hàng"
}
},
"required": ["amount", "description", "order_id"]
}
},
{
"name": "await_settlement",
"description": "Chờ xác nhận thanh toán từ ngân hàng. Trả về thông tin settlement.",
"inputSchema": {
"type": "object",
"properties": {
"payment_id": {
"type": "string",
"description": "ID thanh toán từ create_payment_request"
},
"timeout_seconds": {
"type": "integer",
"description": "Thời gian chờ tối đa (giây), mặc định 600",
"default": 600
}
},
"required": ["payment_id"]
}
}
]
}
File cấu hình này cho phép Claude "biết" về hai công cụ: create_payment_request và await_settlement. Khi Claude cần thu tiền, nó sẽ gọi chúng như các hàm bình thường.
Ví dụ kịch bản thực tế: Bot bán khoá học
Giả sử bạn có một bot bán khoá học AI trên Telegram hoặc Discord. Đây là cách hoạt động từ đầu đến cuối:
Khách: "Tôi muốn mua khoá học Advanced Python."
Bot (Claude): "Tuyệt vời! Khoá học này bao gồm:
• 50 bài học video
• 20 bài tập thực hành
• Hỗ trợ 6 tháng
Giá: 599,000 VND. Bạn có muốn mua không?"
Khách: "Được, thanh toán đi."
Bot: [Gọi create_payment_request(599000, ...)]
"Đây là mã QR để thanh toán:
[QR Code]
Hoặc bạn có thể dùng link này:
https://vietqr.io/...
Tôi sẽ chờ bạn thanh toán..."
[Khách quét QR, thanh toán 599,000 VND]
Bot: [Gọi await_settlement(payment_id)]
[Nhận xác nhận từ ngân hàng]
"✓ Thanh toán thành công!
Tài khoản của bạn đã được kích hoạt.
Bạn có thể truy cập khoá học tại:
https://courses.com/advanced-python
Mật khẩu tạm: [password]
Chúc bạn học tốt!"
Trong ví dụ trên, Claude tự động: 1. Nhận yêu cầu từ khách. 2. Giải thích sản phẩm. 3. Tạo yêu cầu thanh toán. 4. Hiển thị QR code. 5. Chờ xác nhận. 6. Cấp quyền truy cập và gửi thông tin đăng nhập.
Tất cả đều diễn ra trong cùng một cuộc trò chuyện, mà không cần chuyển hướng hoặc can thiệp thủ công.
Nên làm gì và không nên làm gì
| ✓ Nên | ✗ Không nên |
|---|---|
| Xác nhận thanh toán trước khi cấp quyền | Cấp quyền trước khi có xác nhận từ ngân hàng |
Lưu order_id duy nhất cho mỗi giao dịch |
Tái sử dụng order_id cho nhiều giao dịch |
Đặt timeout hợp lý (5-10 phút) |
Để timeout quá ngắn (<1 phút) |
Lưu payment_id để theo dõi |
Xóa payment_id ngay sau khi tạo |
| Báo lỗi rõ ràng nếu thanh toán thất bại | Im lặng hoặc báo lỗi mơ hồ |
| Gửi email xác nhận với mã tham chiếu ngân hàng | Gửi xác nhận mà không có chi tiết |
Các câu hỏi thường gặp (FAQ)
Q1: Tiền sẽ lưu ở đâu? Có an toàn không?
A: Tiền không bao giờ được lưu trữ ở AgentPay VN hoặc bên thứ ba nào. QR code của VietQR trỏ trực tiếp vào tài khoản ngân hàng thực của bạn. Khi khách thanh toán, tiền chuyển thẳng vào ngân hàng của bạn. An toàn tuyệt đối.
Q2: Phí dịch vụ là bao nhiêu?
A: Miễn phí hoàn toàn. AgentPay VN là open-source, không thu phí dịch vụ hay ẩn. Bạn chỉ cần trả phí thanh toán bình thường của ngân hàng (thường là 0.5-1% cho giao dịch chuyển khoản).
Q3: Làm sao Claude biết gọi create_payment_request khi nào?
A: Bạn cần "huấn luyện" Claude thông qua system prompt rõ ràng. Ví dụ: "Khi khách yêu cầu mua sản phẩm, hãy gọi create_payment_request() để tạo yêu cầu thanh toán và hiển thị QR code."
Q4: Điều gì xảy ra nếu khách không thanh toán trong thời gian chờ?
A: Hàm await_settlement() sẽ timeout sau thời gian quy định (mặc định 600 giây). Bạn có thể bắt exception này và thông báo cho khách rằng thanh toán đã hết hạn, yêu cầu tạo yêu cầu mới.
Tóm tắt nhanh
- AgentPay VN: SDK Python + MCP server mã nguồn mở cho thanh toán VietQR.
- Cài đặt:
pip install agentpay-vn(SDK) hoặcpip install agentpay-mcp(MCP server). - Quy trình 3 bước:
create_payment_request()→send checkout_url()→await_settlement(). - An toàn: Tiền đi thẳng vào tài khoản ngân hàng, không lưu trữ nơi khác.
- Tích hợp Claude: MCP server cho phép Claude gọi các hàm thanh toán như công cụ bình thường.
- Ứng dụng thực: Bán khoá học, bán hàng online, quán cà phê tự phục vụ, v.v.
- Không phí dịch vụ: Hoàn toàn miễn phí, chỉ trả phí ngân hàng tiêu chuẩn.
Bắt đầu ngay hôm nay
Bạn đã sẵn sàng để xây dựng MCP server có thu phí của riêng mình. Các bước tiếp theo:
-
Cài đặt SDK:
bash pip install agentpay-vn -
Đọc tài liệu chi tiết: https://agentpay.servicesai.vn/v1/docs
-
Tham khảo code mẫu: https://github.com/phuocdu/agentpay-vn
-
Tích hợp MCP server vào Claude hoặc agent AI của bạn.
-
Kiểm tra với giao dịch thử nghiệm trước khi đưa vào sản xuất.
Nếu bạn có bất kỳ câu hỏi nào, GitHub repo của AgentPay VN là nơi tốt nhất để báo cáo issue hoặc thảo luận.
Chúc bạn xây dựng thành công! Hãy để AI của bạn bắt đầu kiếm tiền cho bạn ngay từ bây giờ.