Dành cho nhà phát triển

API tạo mã QR miễn phí và máy chủ MCP

Tạo mã QR và mã chuyển khoản VietQR từ website, bảng tính, quy trình tự động hay trợ lý AI của bạn. Không cần khoá API, không đăng ký, không watermark — và không lưu bất cứ dữ liệu nào bạn gửi.

  • REST · JSON
  • OpenAPI 3.1
  • MCP (Streamable HTTP)
  • CORS
  • Không cần khoá API

Bắt đầu nhanh

URL gốc: https://scan.io.vn/api/v1. Mọi tuỳ chọn của công cụ tạo mã đều là tham số trên đường dẫn, nên chính URL là tấm ảnh — dán vào trình duyệt để thử ngay.

HTML
<img src="https://scan.io.vn/api/v1/qr?data=https%3A%2F%2Fexample.com&size=300" alt="QR code">
cURL
curl -o wifi.png "https://scan.io.vn/api/v1/qr?type=wifi&ssid=Cafe%20Sua%20Da&password=12345678"
JavaScript (fetch)
const res = await fetch('https://scan.io.vn/api/v1/qr', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    type: 'vcard', first_name: 'An', last_name: 'Nguyen',
    phone: '+84901234567', email: '[email protected]',
    response: 'json',
  }),
});
const { data } = await res.json();
document.querySelector('#qr').src = data.image; // data: URI
Python (requests)
import requests

r = requests.get("https://scan.io.vn/api/v1/vietqr", params={
    "bank": "VCB", "account": "0123456789",
    "amount": 150000, "note": "Order 1024",
})
r.raise_for_status()
open("vietqr.png", "wb").write(r.content)
PHP
$svg = file_get_contents('https://scan.io.vn/api/v1/qr?' . http_build_query([
    'data' => 'https://example.com',
    'format' => 'svg',
    'module_shape' => 'rounded',
]));

Dùng được ở mọi nơi

Nhờ đường dẫn HTTPS thuần và máy chủ MCP theo chuẩn, bộ máy tạo mã của website có mặt trên mọi nền tảng bạn đang dùng.

  • Website & email Đặt URL của API thẳng vào thẻ <img>: không cần JavaScript, không cần SDK, dùng được trong bản tin email và trang CMS (WordPress, Shopify, Haravan…).
  • Google Sheets & Excel Một công thức IMAGE() biến cả cột link, mã sản phẩm hay mã vé thành cột mã QR.
  • Tự động hoá không cần code Gọi từ n8n, Make, Zapier hoặc Power Automate bằng một bước HTTP, hoặc nhập tệp OpenAPI.
  • Trợ lý AI (MCP) Kết nối Claude, ChatGPT, Cursor, VS Code Copilot, Windsurf hoặc Gemini CLI rồi chỉ việc yêu cầu tạo mã QR trong chat.
  • GPT & AI agent Nhập đặc tả OpenAPI 3.1 làm action cho Custom GPT hoặc công cụ cho AI agent; mọi thao tác và tham số đều được mô tả đầy đủ.
  • Mọi ngôn ngữ lập trình HTTPS thuần, lỗi dạng JSON và bật sẵn CORS: JavaScript, Python, PHP, Go, Java, Swift, Kotlin, Dart…

Google Sheets / Excel 365: mỗi dòng một mã QR

Đặt nội dung ở cột A và công thức này ở cột B, rồi kéo xuống:

=IMAGE("https://scan.io.vn/api/v1/qr?size=256&data="&ENCODEURL(A2))

n8n, Make, Zapier, Power Automate, Custom GPT

Dùng bước HTTP request với các đường dẫn trên trang này, hoặc nhập tài liệu OpenAPI để có sẵn mô tả mọi thao tác và tham số: https://scan.io.vn/api/v1/openapi.json

GET POST /qr

Tạo mã QR tĩnh (không bao giờ hết hạn). Chọn loại nội dung và điền các trường của nó — API tự ghi đúng định dạng chuẩn — hoặc gửi dữ liệu thô. GET nhận tham số trên đường dẫn; POST nhận cùng các trường dưới dạng JSON, form hoặc multipart. Để có logo ở giữa, truyền logo_url (ảnh PNG, JPG, GIF hoặc WebP công khai qua https, tối đa 2 MB), hoặc tải lên qua trường logo của POST multipart.

Nội dung

Tham số nội dung
Tham số Giá trị Mô tả
type link | text | wifi | vcard | email | sms | phone | calendar | geo Loại nội dung. Bỏ trống để mã hoá nguyên văn `data`.
data string Nội dung thô cần mã hoá (văn bản, hoặc link khi type=link). Bắt buộc khi không dùng loại nội dung có cấu trúc.
url string Link cần mở (type=link) hoặc website trên danh thiếp (type=vcard). type=link type=vcard
ssid string Tên mạng Wi-Fi. type=wifi
password string Mật khẩu Wi-Fi (bỏ qua khi security=nopass). type=wifi
security WPA | WEP | nopass Mặc định: WPA Kiểu bảo mật Wi-Fi: WPA (gồm cả WPA2/WPA3), WEP hoặc nopass. type=wifi
hidden boolean Mặc định: false Mạng ẩn, không phát tên. type=wifi
first_name string Tên (bắt buộc có tên hoặc họ). type=vcard
last_name string Họ. type=vcard
org string Công ty hoặc tổ chức. type=vcard
email string Địa chỉ email trên danh thiếp. type=vcard
phone string Số điện thoại. type=vcard type=sms type=phone
to string Địa chỉ email người nhận. type=email
subject string Tiêu đề email. type=email
body string Nội dung email. type=email
message string Nội dung tin nhắn soạn sẵn. type=sms
title string Tên sự kiện. type=calendar
start string Thời gian bắt đầu, giờ địa phương (YYYY-MM-DDTHH:MM). type=calendar
end string Thời gian kết thúc, giờ địa phương. type=calendar
location string Địa điểm sự kiện. type=calendar
description string Mô tả sự kiện. type=calendar
lat -90–90 Vĩ độ. type=geo
lng -180–180 Kinh độ. type=geo

Ví dụ theo loại nội dung

Thiết kế

Tham số thiết kế
Tham số Giá trị Mô tả
format svg | png | webp Mặc định: png Định dạng ảnh.
size 128–2048 Mặc định: 512 Chiều rộng và cao tính bằng pixel, gồm cả viền.
border 0 | 2 | 4 | 6 Mặc định: 4 Viền trống quanh mã: 0 không viền, 2 mỏng, 4 vừa, 6 dày.
color string Mặc định: #000000 Màu các ô mã (hex).
background string Mặc định: #ffffff Màu nền (hex).
eye_color string Màu ba mắt ở góc (hex). Mặc định trùng màu ô mã.
module_shape square | rounded | dots Mặc định: square Hình dạng các ô mã.
eye_frame_shape square | rounded | circle Mặc định: square Hình dạng khung mắt ở góc.
eye_pupil_shape square | rounded | circle Mặc định: square Hình dạng tròng mắt ở góc.
error_correction high | quartile | medium | low Mặc định: high Mức sửa lỗi: high (chịu được hư hại/che khuất ~30% mã), quartile (~25%), medium (~15%) hoặc low (~7%). Mức thấp cho ít ô hơn, ô to hơn; nên giữ high hoặc quartile khi có logo ở giữa.
label string Chú thích bên dưới mã.
label_size 8–72 Mặc định: 20 Cỡ chữ chú thích.
label_align left | center | right Mặc định: center Căn lề chú thích.
label_color string Mặc định: #000000 Màu chú thích (hex).
logo_url string URL https công khai của logo PNG, JPG, GIF hoặc WebP (tối đa 2 MB) đặt ở giữa mã. Máy chủ của chúng tôi tải về và lưu đệm trong một giờ.
logo_size 16–1024 Mặc định: 40 Chiều rộng logo ở giữa, tính bằng pixel (logo từ logo_url, hoặc tải lên qua trường `logo` dạng multipart khi dùng POST).

Tuỳ chọn phản hồi

Tham số phản hồi
Tham số Giá trị Mô tả
response image | json Mặc định: image image trả về chính tệp ảnh; json trả về nội dung đã mã hoá và ảnh dạng data URI base64.
download boolean Mặc định: false Gửi ảnh dưới dạng tệp đính kèm (Content-Disposition) thay vì hiển thị trực tiếp.
filename string Tên tệp tải về, không gồm phần mở rộng (chữ, số, dấu chấm, gạch ngang, gạch dưới).

Thiết kế riêng kèm logo (multipart)

cURL
curl -o qr.png \
  -F "data=https://example.com" \
  -F "module_shape=dots" -F "eye_frame_shape=rounded" \
  -F "color=#4f46e5" -F "[email protected]" \
  https://scan.io.vn/api/v1/qr

POST /qr/batch

Tạo tối đa 50 mã QR cùng một thiết kế trong một yêu cầu và trả về file ZIP, hoặc JSON khi dùng response=json. Mỗi mục trong items là một chuỗi (mã hoá nguyên văn) hoặc một object với các tham số nội dung ở trên và filename tuỳ chọn; tham số thiết kế áp dụng cho mọi mã. Lỗi của tất cả các mục được báo cùng lúc, theo khoá items.<vị trí>.<trường>.

cURL
curl -o menus.zip https://scan.io.vn/api/v1/qr/batch \
  -H "Content-Type: application/json" \
  -d '{"items": [
        "https://example.com/menu?table=1",
        "https://example.com/menu?table=2",
        {"type": "wifi", "ssid": "Cafe", "password": "12345678", "filename": "wifi"}
      ],
      "module_shape": "rounded", "format": "svg"}'

Để thêm logo, gửi dạng multipart kèm tệp logo và items là một chuỗi JSON. Yêu cầu tạo hàng loạt có giới hạn riêng 10 lần mỗi phút cho mỗi IP.

GET /vietqr

Tạo mã chuyển khoản VietQR (EMVCo / NAPAS) dạng PNG. Ứng dụng ngân hàng tại Việt Nam quét mã sẽ tự điền ngân hàng, số tài khoản và, nếu có, số tiền và nội dung. Với response=json bạn nhận thêm thông tin ngân hàng và chuỗi EMVCo gốc.

Tham số VietQR
Tham số Giá trị Mô tả
bank* string Mã BIN ngân hàng (vd. 970436), mã viết tắt (vd. VCB) hoặc tên ngắn (vd. Vietcombank). Xem /api/v1/banks.
account* string Số tài khoản, chỉ gồm chữ số.
amount 2000–99999999 Số tiền cố định (VND). Bỏ trống để tạo mã dùng lại nhiều lần, người chuyển tự nhập số tiền.
note string Nội dung chuyển khoản. Dấu câu được thay bằng khoảng trắng.
size 200–1000 Mặc định: 400 Chiều rộng và cao của ảnh PNG, tính bằng pixel.
URL
https://scan.io.vn/api/v1/vietqr?bank=VCB&account=0123456789&amount=150000&note=Order%201024

GET /banks

Liệt kê các ngân hàng nhận chuyển khoản VietQR cùng mã BIN, mã viết tắt, tên ngắn, tên đầy đủ, mã SWIFT và logo. Tham số q (không bắt buộc) lọc theo đầu mã BIN, mã viết tắt hoặc tên.

URL
https://scan.io.vn/api/v1/banks?q=vietcom

Mã QR động (cần khoá API)

Mã QR động chứa một đường link rút gọn mà bạn có thể đổi đích sau khi in, và đếm lượt quét. Quản lý các mã trong tài khoản từ phần mềm của bạn hay từ trợ lý AI bằng một khoá API cá nhân.

  1. Đăng ký miễn phí và xác minh địa chỉ email.
  2. Tạo khoá ở trang Khoá API. Chọn "Chỉ đọc" để xem báo cáo, hoặc "Đọc & thay đổi" để tạo và sửa mã. Khoá chỉ hiển thị một lần.
  3. Gửi kèm khoá trong mọi yêu cầu: Authorization: Bearer sqr_…
Các endpoint mã QR động
Endpoint Mô tả Khoá
GET /dynamic-qr Liệt kê mã của bạn (tuỳ chọn status=active|paused|blocked). Chỉ đọc
POST /dynamic-qr Tạo mã: target_url, name và mọi tham số thiết kế; multipart có thể kèm logo. Đọc & thay đổi
GET /dynamic-qr/{code} Một mã kèm lượt quét hôm nay / 7 / 30 ngày và các lần đổi đích gần đây. Chỉ đọc
PATCH /dynamic-qr/{code} Đổi target_url hoặc name, tạm dừng hay bật lại bằng is_active. Đọc & thay đổi
DELETE /dynamic-qr/{code} Xoá mã. Các bản đã in ngừng hoạt động; mã không bao giờ được cấp lại. Đọc & thay đổi
GET /dynamic-qr/{code}/stats Lượt quét theo ngày, khách không trùng, quốc gia, thành phố, thiết bị, hệ điều hành và ứng dụng trong một khoảng thời gian. Chỉ đọc
GET /dynamic-qr/{code}/image Ảnh mã QR theo thiết kế đã lưu; có thể đổi định dạng và kích thước. Chỉ đọc

Tạo và thay đổi

Tham số mã QR động
Tham số Giá trị Mô tả
target_url* string Nơi lượt quét được chuyển tới (http/https). Có thể đổi sau mà không cần in lại mã.
name string Tên để nhận ra mã trong trang quản trị. Mặc định là tên miền của link.

Khi tạo, bạn có thể truyền thêm mọi tham số thiết kế của /qr; thiết kế được lưu cùng mã. PATCH nhận target_url, name và is_active, đều không bắt buộc.

Tạo mới
curl https://scan.io.vn/api/v1/dynamic-qr \
  -H "Authorization: Bearer $SCAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_url": "https://example.com/menu", "name": "Menu table 1", "module_shape": "rounded"}'
Chuyển mã đã in sang trang mới
curl -X PATCH https://scan.io.vn/api/v1/dynamic-qr/Ab3xK9z \
  -H "Authorization: Bearer $SCAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"target_url": "https://example.com/menu-autumn"}'

Thống kê

Tham số thống kê
Tham số Giá trị Mô tả
range 7 | 30 | 90 | custom Mặc định: 30 7, 30 hoặc 90 ngày gần nhất, hoặc custom với from/to.
from string Ngày bắt đầu (YYYY-MM-DD) khi range=custom.
to string Ngày kết thúc (YYYY-MM-DD) khi range=custom; cách from tối đa 366 ngày.
cURL
curl "https://scan.io.vn/api/v1/dynamic-qr/Ab3xK9z/stats?range=30" \
  -H "Authorization: Bearer $SCAN_TOKEN"

Áp dụng cùng quy định như trên trang quản trị: tối đa 50 mã mỗi tài khoản và 30 lần đổi đích mỗi ngày, chỉ nhận link (http/https), đích được kiểm tra bằng Google Safe Browsing, và mã bị chặn do vi phạm thì không thể thay đổi. Mã của tài khoản khác chỉ trả về 404.

Phản hồi & lỗi

Các endpoint ảnh trả về chính tệp ảnh với Content-Type phù hợp, được lưu đệm một ngày. Thêm response=json để nhận phản hồi JSON, trong đó ảnh ở dạng data URI base64:

200 OK · application/json
{
    "code": "00",
    "message": "Success",
    "data": {
        "content": "WIFI:T:WPA;S:Cafe;P:12345678;;",
        "format": "png",
        "mime_type": "image/png",
        "image": "data:image/png;base64,iVBORw0KGgo…",
        "image_url": "https://scan.io.vn/api/v1/qr?type=wifi&ssid=Cafe&password=12345678"
    },
    "extra_data": []
}

Lỗi luôn dùng cùng cấu trúc phản hồi. Thông báo bằng tiếng Anh, hoặc tiếng Việt khi yêu cầu gửi kèm Accept-Language: vi.

422 Unprocessable Content
{
    "code": "02",
    "message": "The ssid field is required.",
    "data": {
        "ssid": [
            "The ssid field is required."
        ]
    },
    "extra_data": []
}
  • 422 tham số sai hoặc thiếu (mã 02), thông báo cho từng trường nằm trong data
  • 429 vượt giới hạn tần suất — chờ số giây trong header Retry-After
  • 404 / 405 endpoint hoặc phương thức không tồn tại (mã 01)

Giới hạn

API miễn phí, không có hạn mức theo ngày hay tháng. Để luôn nhanh cho mọi người, mỗi địa chỉ IP có:

  • 60 / min Yêu cầu REST API
  • 10 / min Yêu cầu tạo hàng loạt (mỗi lần tối đa 50 mã)
  • 120 / min Yêu cầu MCP
  • 2048 px Ảnh QR lớn nhất
  • 1273 bytes Nội dung dài nhất ở mức sửa lỗi H
  • 2 MB Tải logo
  • Không Giới hạn tổng số mã hay lượt quét

Cần tạo hàng nghìn mã? Hãy lưu đệm ảnh ở phía bạn — cùng một URL luôn trả về cùng một ảnh.

Máy chủ MCP cho trợ lý AI

Model Context Protocol (MCP) là chuẩn mở mà các trợ lý AI dùng để gọi công cụ bên ngoài. Thêm máy chủ của chúng tôi một lần, sau đó bạn chỉ cần yêu cầu bằng lời thường — "tạo mã QR Wi-Fi cho quán", "tạo mã QR chuyển khoản 150.000đ" — và nhận ảnh ngay trong khung chat. Máy chủ từ xa, giao thức Streamable HTTP, không cần xác thực.

URL máy chủ Công cụ công khai, không cần đăng nhập.
https://scan.io.vn/mcp
Kèm tài khoản của bạn Thêm các mã QR động của bạn. Ứng dụng sẽ yêu cầu bạn đăng nhập (OAuth) hoặc gửi kèm khoá API.
https://scan.io.vn/mcp/account

Công cụ

  • generate_qr_code Tạo mã QR

    Create a static QR code image (never expires, free, no watermark) and get a download link. Pick `type` and fill only that type's fields: link (url), text (data), wifi (ssid, password, security, hidden), vcard (first_name, last_name, org, phone, email, url), email (to, subject, body), sms (phone, message), phone (phone), calendar (title, start, end, location, description; local time YYYY-MM-DDTHH:MM), geo (lat, lng). The standard encoding (WIFI:, vCard 3.0, mailto:, SMSTO:, tel:, iCalendar, geo:) is done for you. Optional design: colors, module and eye shapes, a center logo from a public https logo_url, caption, size, format (png, svg, webp). Returns a PNG preview, the encoded content and a download URL in the requested format. Nothing is stored. For Vietnamese bank transfers use generate_vietqr instead.

  • generate_qr_codes_batch Tạo nhiều mã QR cùng lúc

    Create up to 50 static QR codes with the same design in one call, e.g. one per table, product, ticket or link. Each item is either a plain string (encoded as-is, like a link) or an object with the same content fields as generate_qr_code (type + its fields) and an optional filename. Design options apply to every code. Returns a preview of the first code and a download link for each one; nothing is stored. For a single ZIP file, the user or their app can POST the same items to https://scan.io.vn/api/v1/qr/batch.

  • generate_vietqr Tạo mã chuyển khoản VietQR

    Create a VietQR (EMVCo / NAPAS) bank transfer QR code for a Vietnamese bank account ("mã QR chuyển khoản"). Vietnamese banking apps scan it and pre-fill the bank, account number and, if given, the amount (VND) and transfer note. `bank` accepts a BIN (970436), code (VCB) or short name (Vietcombank); call list_banks if unsure. Leave out `amount` for a reusable code where the payer types the amount. Returns a PNG, the EMVCo payload and an image URL. Nothing is stored.

  • list_banks Danh sách ngân hàng hỗ trợ VietQR

    List the Vietnamese banks that accept VietQR transfers, with BIN, code and names, to pick the `bank` value for generate_vietqr. Optional `query` filters by BIN, code or name (e.g. "vietcom", "MB", "9704").

  • list_dynamic_qr_codes Danh sách mã QR động của tôi Khoá API

    List the dynamic QR codes in the user's account, newest first: code, name, status (active, paused, blocked), short link encoded in the QR, current destination and total scans. Use the code with the other *_dynamic_qr_* tools.

  • get_dynamic_qr_code Xem một mã QR động Khoá API

    Show one of the user's dynamic QR codes: the QR image, its short link and destination, status, scans today / last 7 days / last 30 days, and the recent destination changes. For charts and breakdowns use get_dynamic_qr_stats.

  • get_dynamic_qr_stats Thống kê lượt quét của mã QR động Khoá API

    Scan statistics of one of the user's dynamic QR codes for a period (last 7/30/90 days or custom dates): total and unique scans, change versus the previous period, busiest day, daily counts, and breakdowns by country, city, device, operating system and app/browser (e.g. scanned from Zalo or Facebook). Bots are excluded; no IP addresses are stored.

  • create_dynamic_qr_code Tạo mã QR động Khoá API

    Create a dynamic QR code in the user's account: the QR holds a short link that redirects to `target_url`, so the destination can be changed later (update_dynamic_qr_code) without reprinting, and scans are counted (get_dynamic_qr_stats). Links only (http/https); destinations are checked with Google Safe Browsing. Optional design: colors, module and eye shapes, a logo from logo_url, caption, size, format. Limit: 50 codes per account and 30 destination changes per day. For a QR that never needs to change, generate_qr_code is simpler.

  • update_dynamic_qr_code Sửa mã QR động Khoá API

    Change one of the user's dynamic QR codes without reprinting it: point it to a new `target_url`, rename it, or pause (is_active=false: scans see a notice) / resume it. Only the fields you pass change. Every printed copy follows the new destination immediately, so confirm the new link with the user first. New links are checked with Google Safe Browsing; blocked codes cannot be changed.

  • delete_dynamic_qr_code Xoá mã QR động Khoá API

    Permanently delete one of the user's dynamic QR codes. Printed copies stop working (scans see a "not found" page) and the code is never reused. This cannot be undone: confirm with the user first, and suggest pausing (update_dynamic_qr_code with is_active=false) if they may need it again.

Cài đặt trong ứng dụng của bạn

Claude (claude.ai, Desktop, mobile)

Cài đặt (Settings) → Connectors → Add custom connector, rồi dán URL máy chủ. Dùng https://scan.io.vn/mcp/account để đăng nhập và quản lý cả mã QR động của bạn.

Claude Code

claude mcp add --transport http scan-qr https://scan.io.vn/mcp

ChatGPT

Cài đặt (Settings) → Apps & Connectors → Advanced settings → bật Developer mode, sau đó Create một connector với URL máy chủ, không cần xác thực — hoặc dùng https://scan.io.vn/mcp/account với OAuth để dùng tài khoản của bạn.

Cursor

~/.cursor/mcp.json

{
    "mcpServers": {
        "scan-qr": {
            "url": "https://scan.io.vn/mcp"
        }
    }
}

VS Code (GitHub Copilot)

.vscode/mcp.json

{
    "servers": {
        "scan-qr": {
            "type": "http",
            "url": "https://scan.io.vn/mcp"
        }
    }
}

Windsurf

~/.codeium/windsurf/mcp_config.json

{
    "mcpServers": {
        "scan-qr": {
            "serverUrl": "https://scan.io.vn/mcp"
        }
    }
}

Gemini CLI

~/.gemini/settings.json

{
    "mcpServers": {
        "scan-qr": {
            "httpUrl": "https://scan.io.vn/mcp"
        }
    }
}

Ứng dụng chỉ hỗ trợ stdio

Kết nối máy chủ từ xa qua mcp-remote (cần Node.js):

{
    "mcpServers": {
        "scan-qr": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-remote",
                "https://scan.io.vn/mcp"
            ]
        }
    }
}

Quản lý mã QR động ngay từ trợ lý AI

Các công cụ gắn nhãn "Khoá API" sẽ xuất hiện khi kết nối gửi kèm khoá của bạn (tạo ở trang Khoá API). Các ứng dụng cho phép đặt header:

Claude Code

claude mcp add --transport http scan-qr https://scan.io.vn/mcp --header "Authorization: Bearer sqr_your_token"

Cursor

~/.cursor/mcp.json

{
    "mcpServers": {
        "scan-qr": {
            "url": "https://scan.io.vn/mcp",
            "headers": {
                "Authorization": "Bearer sqr_your_token"
            }
        }
    }
}

VS Code (GitHub Copilot)

.vscode/mcp.json

{
    "inputs": [
        {
            "type": "promptString",
            "id": "scan-token",
            "description": "scan.io.vn API token",
            "password": true
        }
    ],
    "servers": {
        "scan-qr": {
            "type": "http",
            "url": "https://scan.io.vn/mcp",
            "headers": {
                "Authorization": "Bearer ${input:scan-token}"
            }
        }
    }
}

Windsurf

~/.codeium/windsurf/mcp_config.json

{
    "mcpServers": {
        "scan-qr": {
            "serverUrl": "https://scan.io.vn/mcp",
            "headers": {
                "Authorization": "Bearer sqr_your_token"
            }
        }
    }
}

Gemini CLI

~/.gemini/settings.json

{
    "mcpServers": {
        "scan-qr": {
            "httpUrl": "https://scan.io.vn/mcp",
            "headers": {
                "Authorization": "Bearer sqr_your_token"
            }
        }
    }
}

mcp-remote (stdio)

{
    "mcpServers": {
        "scan-qr": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-remote",
                "https://scan.io.vn/mcp",
                "--header",
                "Authorization:${SCAN_AUTH}"
            ],
            "env": {
                "SCAN_AUTH": "Bearer sqr_your_token"
            }
        }
    }
}

Đăng nhập từ Claude, ChatGPT và các connector khác (OAuth)

Thêm https://scan.io.vn/mcp/account làm URL của connector. Ứng dụng sẽ mở một trang của scan.io.vn để bạn đăng nhập và chọn quyền cho phép (chỉ đọc, hoặc cả thay đổi); bạn có thể ngắt kết nối bất cứ lúc nào ở trang Khoá API. Theo chuẩn uỷ quyền của MCP: OAuth 2.1 với PKCE, đăng ký client động, protected resource metadata — không cần cấu hình gì.

Dành cho người phát triển client: /.well-known/oauth-protected-resource/mcp/account, /.well-known/oauth-authorization-server. Scope: dynamic-qr:read, dynamic-qr:write. Mã truy cập có hiệu lực 1 giờ, mã làm mới 30 ngày và được thay mới sau mỗi lần dùng. Client có thể đăng ký động hoặc dùng Client ID Metadata Document: một client_id là URL https trả về thông tin client dạng JSON (chỉ client công khai, tối đa 5120 byte).

Thử hỏi

  • “Tạo mã QR cho mạng Wi-Fi "Cafe Sua Da", mật khẩu 12345678, dạng chấm tròn màu xanh đậm.”
  • “Tạo mã QR danh thiếp cho Nguyễn Văn An, điện thoại 0901 234 567, email [email protected].”
  • “Tạo mã VietQR chuyển khoản Vietcombank số tài khoản 0123456789, 150.000đ, nội dung "Don hang 1024".”
  • “Biến 5 đường link này thành mã QR dạng SVG và gửi tôi đường dẫn tải về.”
  • “Mã QR "Menu bàn 1" của tôi được quét bao nhiêu lần trong tháng này, từ những thành phố nào?”
  • “Chuyển mã QR thực đơn của tôi sang trang thực đơn mùa thu mới.”

Quyền riêng tư

  • API và máy chủ MCP không lưu dữ liệu bạn gửi vào cơ sở dữ liệu: không nhật ký tạo mã, không lịch sử, và logo tải lên bị xoá ngay sau khi tạo ảnh.
  • Ngoại lệ là mã QR động: chúng được lưu trong tài khoản của bạn như mã tạo trên website. Khoá API chỉ được lưu dưới dạng mã băm; thu hồi khoá bất cứ lúc nào và khoá ngừng hoạt động ngay.
  • Ứng dụng kết nối qua OAuth chỉ có đúng quyền bạn đã cho phép, không bao giờ nhận mật khẩu của bạn; mã của chúng cũng chỉ lưu dạng mã băm và hết hiệu lực khi bạn ngắt kết nối.
  • Như mọi yêu cầu web, một URL GET (kể cả tham số) có thể xuất hiện tạm thời trong nhật ký truy cập kỹ thuật của máy chủ và CDN. Hãy gửi thông tin nhạy cảm như mật khẩu Wi-Fi bằng POST, và cẩn trọng khi chia sẻ đường dẫn ảnh.
  • Ai cũng có thể gọi API mà không cần tài khoản; bạn chịu trách nhiệm về nội dung các mã mình tạo, theo quy định tại Điều khoản sử dụng.