Tạo MCP Server có thu phí: Claude tự động nhận tiền trong chat

2026-09-13 · AgentPay VN

aipythonmcpvietqragentpay

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:

  1. 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.
  2. Tăng tỷ lệ chuyển đổi: Giảm ma sát, tăng số người hoàn tất mua hàng.
  3. 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.
  4. 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.
  5. 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:


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:

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:


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_requestawait_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


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:

  1. Cài đặt SDK: bash pip install agentpay-vn

  2. Đọc tài liệu chi tiết: https://agentpay.servicesai.vn/v1/docs

  3. Tham khảo code mẫu: https://github.com/phuocdu/agentpay-vn

  4. Tích hợp MCP server vào Claude hoặc agent AI của bạn.

  5. 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ờ.

Bắt đầu →

← Tất cả bài